android 史上最简单behavior,安卓behavior详解1--系统behavior的简单应用
一.簡介
Behavior的中文翻譯是”行為”的意思.
Behavior是Android新出的Design庫里新增的布局概念。Behavior只有是CoordinatorLayout的直接子View才有意義。可以為任何View添加一個Behavior。
Material Design里面的CoordinatorLayout是一個非常強大的控件,它接管了child組件之間的交互。讓你滑動交互使用更加方便簡單,效果也更加強大,不需要像以前那樣自己處理一坨什么亂七八槽的滑動,事件傳遞之類的處理了。
Behavior是一系列回調。讓你有機會以非侵入的為View添加動態的依賴布局,和處理父布局(CoordinatorLayout)滑動手勢的機會。如果我們想實現控件之間任意的交互效果,完全可以通過自定義 Behavior 的方式達到。
在學習自定義behavior之前我們先看一看官方內置的behavior
二.BottomSheetBehavior
BottomSheetBehavior實現的效果就是一個布局底部彈出,類似于餓了么查看購物車的效果,這種效果我們可以有很多種方式實現,使用BottomSheetBehavior你會發現簡直只需要一行代碼.
1.頁面布局
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_group_car_boottom_sheet"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.testdemo.king.kingtestdemo.GroupCarBoottomSheetActivity">
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:text="顯示bottomsheetBehavior"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
android:text="顯示bottomsheetBehaviorDialog"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
LinearLayout>
android:layout_width="match_parent"
android:layout_gravity="center"
android:layout_height="match_parent"
android:background="@color/colorAccent"
app:behavior_hideable="true"
app:behavior_peekHeight="100dp"
app:elevation="4dp"
app:layout_behavior="@string/bottom_sheet_behavior">
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="展示Bottom Sheets"
android:textColor="#FFFFFF" />
RelativeLayout>
android.support.design.widget.CoordinatorLayout>
屬性說明
//折疊的高度
app:behavior_peekHeight="10dp" setPeekHeight
//是否可以隱藏
app:behavior_hideable="true" setHideable
//是否跳過折疊狀態
app:behavior_skipCollapsed="true" setSkipCollapsed
2.代碼實現
只需要獲取到這個behavior
bottomSheetBehavior=BottomSheetBehavior.from((View)rlBottom);
然后點擊的時候按鈕時候控制其隱藏和出現即可
case R.id.bt1:
if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_COLLAPSED) {
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
} else {
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
break;
狀態說明:
STATE_COLLAPSED: 關閉Bottom Sheets,顯示peekHeight的高度,默認是0
STATE_DRAGGING: 用戶拖拽Bottom Sheets時的狀態
STATE_SETTLING: 當Bottom Sheets view釋放時記錄的狀態。
STATE_EXPANDED: 當Bottom Sheets 展開的狀態
STATE_HIDDEN: 當Bottom Sheets 隱藏的狀態
3.狀態監聽
我們可以通過監聽狀態的改變做一些自定義的操作,比如這樣.
bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
// /這里是bottomSheet 狀態的改變,根據slideOffset可以做一些動畫
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
//這里是拖拽中的回調,根據slideOffset可以做一些動畫
Log.e("king",slideOffset+"");
if(slideOffset>0){
if(slideOffset>0.5)slideOffset=0.5f;
ViewGroup.LayoutParams para1;
para1 = bottomSheet.getLayoutParams();
para1.width = (int) (rlBottomWidth*(0.5+slideOffset));
bottomSheet.setLayoutParams(para1);
}
}
});
三.BottomSheetDialog
BottomSheetDialog是一個基于bottomSheetbehavior實現的dialog
代碼實現
private void initBottomSheetDialog() {
dialog = new BottomSheetDialog(this);
View dialogView = LayoutInflater.from(this).inflate(R.layout.item_text, null, false);
((TextView) dialogView.findViewById(R.id.text)).setText("bottomsheetDialog");
dialog.setContentView(dialogView);
dialog.hide();
}
然后只需要調用dialog.hide();或者show()方法就能實現dialog的顯示隱藏了.
當然,BottomSheetDialog也能調用狀態監聽,具體實現如下
private void setBehaviorCallback() {
View view = dialog.getDelegate().findViewById(android.support.design.R.id.design_bottom_sheet);
final BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(view);
bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_HIDDEN) {
dialog.dismiss();
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
}
四.SwipeDismissBehavior
SwipeDismissBehavior是一個實現側滑刪除的效果,比較簡單
private void initSwipeDismissBehavior() {
SwipeDismissBehaviorswipe = new SwipeDismissBehavior();
swipe.setSwipeDirection(SwipeDismissBehavior.SWIPE_DIRECTION_ANY);
swipe.setListener(
new SwipeDismissBehavior.OnDismissListener() {
@Override
public void onDismiss(View view) {
}
@Override
public void onDragStateChanged(int state) {
}
});
CoordinatorLayout.LayoutParams coordinatorParams =
(CoordinatorLayout.LayoutParams)tv1 .getLayoutParams();
coordinatorParams.setBehavior(swipe);
}
五.AppBarLayout$ScrollingViewBehavior
ScrollingViewBehavior的簡單應用大家參考一下這篇文章吧
http://blog.csdn.net/aqi00/article/details/56834285
系統默認提供的behavior畢竟只能實現一部分功能,下一篇博客我們將介紹如何使用自定義behavior來實現復雜的功能.
總結
以上是生活随笔為你收集整理的android 史上最简单behavior,安卓behavior详解1--系统behavior的简单应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《深度思维》内容脑图
- 下一篇: mac系统下修改usr/bin文件夹权限