安卓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="http://schemas.android.com/apk/res/android"
    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">


    <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的高度,默认是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() {
        SwipeDismissBehavior<View> swipe = 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来实现复杂的功能.

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
dangerous_driving_behavior_detection-master 是一个能够检测危险驾驶行为的项目。这个项目使用了计算机视觉和机器学习技术,旨在通过分析驾驶员的行为和动作来识别可能危险的驾驶行为。 项目的目标是通过监测驾驶员的动作和行为,如快速变道、不规则的加减速、频繁的刹车等,来判断驾驶员是否存在潜在的危险行为。这个项目可以应用于各种交通场景,如高速公路、城市道路和乡村道路。 为了实现这一目标,该项目使用摄像头或者其他传感器来获得驾驶员的实时视频数据。然后,通过图像处理和深度学习算法,对这些视频数据进行分析和识别。系统将根据预先定义的危险行为模式和规则,来判断驾驶员是否表现出危险的驾驶行为。 一旦系统检测到可能的危险行为,它会通过警报装置或者其他方式向驾驶员发出警告,以引起驾驶员的注意。此外,系统还可以将驾驶员的危险行为数据存储下来,以供后续的分析和统计。 这个项目的应用前景广阔。它可以用于驾驶员教育和培训,帮助驾驶员识别和纠正危险行为,提高驾驶安全性。此外,在交通管理和执法,该系统也可以起到监督和警示的作用,减少交通事故的发生。 总之,dangerous_driving_behavior_detection-master 是一个应用计算机视觉和机器学习技术来检测危险驾驶行为的项目。它可以通过分析驾驶员的行为和动作,判断是否存在危险行为,并通过警示和数据记录等方式来提高驾驶安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值