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

android 史上最简单behavior 安卓behavior详解1--系统behavior的简单应用

时间:2019-02-19 11:54:15

相关推荐

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="/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">

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的简单应用大家参考一下这篇文章吧

/aqi00/article/details/56834285

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

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