一個富有動感的Sheet(選擇器)
github
Android Arsenal
Android Gems
簡書
我的新浪
先發(fā)兩張圖:
gradle
/build.gradle
jitpack.io
repositories {
maven {
url "https://jitpack.io"
}
}
/app/build.gradle
compile compile 'com.github.zzz40500:AndroidSweetSheet:1.1.0''
Usage:
MainActivity.class
// SweetSheet 控件,根據(jù) rl 確認位置
mSweetSheet = new SweetSheet(rl);
//設置數(shù)據(jù)源 (數(shù)據(jù)源支持設置 list 數(shù)組,也支持從menu 資源中獲取)
mSweetSheet.setMenuList(list);
//根據(jù)設置不同的 Delegate 來顯示不同的風格.
mSweetSheet.setDelegate(new RecyclerViewDelegate(true));
//根據(jù)設置不同Effect來設置背景效果:BlurEffect 模糊效果.DimEffect 變暗效果,NoneEffect 沒有效果.
mSweetSheet.setBackgroundEffect(new BlurEffect(8));
//設置菜單點擊事件
mSweetSheet.setOnMenuItemClickListener(new SweetSheet.OnMenuItemClickListener() {
@Override
public boolean onItemClick(int position, MenuEntity menuEntity1) {
//根據(jù)返回值, true 會關閉 SweetSheet ,false 則不會.
Toast.makeText(MainActivity.this, menuEntity1.title + " " + position, Toast.LENGTH_SHORT).show();
return true;
}
});
自定義擴展:
// SweetSheet 控件,根據(jù) rl 確認位置
mSweetSheet3 = new SweetSheet(rl);
//定義一個 CustomDelegate 的 Delegate ,并且設置它的出現(xiàn)動畫.
CustomDelegate customDelegate = new CustomDelegate(true,
CustomDelegate.AnimationType.DuangLayoutAnimation);
View view = LayoutInflater.from(this).inflate(R.layout.layout_custom_view, null, false);
//設置自定義視圖.
customDelegate.setCustomView(view);
//設置代理類
mSweetSheet3.setDelegate(customDelegate);
//因為使用了 CustomDelegate 所以mSweetSheet3中的 setMenuList和setOnMenuItemClickListener就沒有效果了
view.findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSweetSheet3.dismiss();
}
});
監(jiān)聽返回
@Override
public void onBackPressed() {
if(mSweetSheet.isShow()){
mSweetSheet.dismiss();
} else{
super.onBackPressed();
}
}
v1.1(版本說明)
- 去掉之前ViewPager 使用FragmentStatePagerAdapter 做為它的適配器.
SweetSheet 不支持 LinearLayout 作為它的父控件.
setMenuList 設置數(shù)據(jù)源支持從 List<MenuEntity>數(shù)組和Menu資源的填充.(Menu僅支持一級Menu,因為2級Menu我還沒想好怎么展示).
setBackgroundEffect(Effect effect) 提供對背景效果的支持,目前提供3種風格:
BlurEffect:模糊效果,DimEffect 變暗效果,NoneEffect 沒有效果.
你也可以繼承Effect擴展背景的效果setDelegate 目前提供了三種風格
RecyclerViewDelegate,ViewPagerDelegate,CustomDelegate.CustomDelegate用于擴展類,你可以使用通過構造方法指定出現(xiàn)動畫,通過setCustomView(View v)來設置你的自定義的布局.
CustomDelegate中提供了4種類型:
DuangLayoutAnimation,DuangAnimation,
AlphaAnimation,Custom:
看名字大概就能知道它是什么效果.如果你對前3個效果不滿意你就使用 Custom ,然后通過setCustomViewAnimation設置出現(xiàn)效果.CRImageView 內(nèi)部實現(xiàn)了 Android 5.0上面的CircleReveal效果.使用方法:
CRImageView. circularReveal(int centerX, int centerY, float startRadius, float endRadius, long duration, Interpolator interpolator)
你可以在你的項目中用上它.
FAQ
怎么使包括 actionBar 在內(nèi)的背景也虛化?
使用 一個 FrameLayout或者RelativeLayout 里面用 ToolBar 來替代 ActionBar ,然后將這個 FrameLayout 或者RelativeLayout作為SweetSheet 的父控件,