第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 安卓behavior详解1--系统behavior的简单应用

安卓behavior详解1--系统behavior的简单应用

时间:2022-06-12 14:36:58

相关推荐

安卓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.页面布局

<?xml version="1.0" encoding="utf-8"?><android.support.design.widget.CoordinatorLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/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"><LinearLayout android:visibility="visible"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="match_parent"><Button android:id="@+id/bt1"android:text="显示bottomsheetBehavior"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content" /><Button android:id="@+id/bt2"android:text="显示bottomsheetBehaviorDialog"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content" /></LinearLayout><RelativeLayout android:id="@+id/design_bottom_sheet"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"><TextView android:id="@+id/bottomsheet_text"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的高度,默认是0STATE_DRAGGING: 用户拖拽Bottom Sheets时的状态STATE_SETTLING: 当Bottom Sheets view释放时记录的状态。STATE_EXPANDED: 当Bottom Sheets 展开的状态STATE_HIDDEN: 当Bottom Sheets 隐藏的状态

3.状态监听

我们可以通过监听状态的改变做一些自定义的操作,比如这样.

bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {@Overridepublic void onStateChanged(@NonNull View bottomSheet, int newState) {///这里是bottomSheet 状态的改变,根据slideOffset可以做一些动画}@Overridepublic 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() {@Overridepublic void onStateChanged(@NonNull View bottomSheet, int newState) {if (newState == BottomSheetBehavior.STATE_HIDDEN) {dialog.dismiss();bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);}}@Overridepublic void onSlide(@NonNull View bottomSheet, float slideOffset) {}});}

四.SwipeDismissBehavior

SwipeDismissBehavior是一个实现侧滑删除的效果,比较简单

private void initSwipeDismissBehavior() {SwipeDismissBehavior<View> swipe = new SwipeDismissBehavior();swipe.setSwipeDirection(SwipeDismissBehavior.SWIPE_DIRECTION_ANY);swipe.setListener(new SwipeDismissBehavior.OnDismissListener() {@Overridepublic void onDismiss(View view) {}@Overridepublic void onDragStateChanged(int state) {}});CoordinatorLayout.LayoutParams coordinatorParams =(CoordinatorLayout.LayoutParams)tv1 .getLayoutParams();coordinatorParams.setBehavior(swipe);}

五.AppBarLayout$ScrollingViewBehavior

ScrollingViewBehavior的简单应用大家参考一下这篇文章吧

/aqi00/article/details/56834285

系统默认提供的behavior毕竟只能实现一部分功能,下一篇博客我们将介绍如何使用自定义behavior来实现复杂的功能.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。