Android开发之自定义Behavior
来源:互联网 发布:网络授权书 编辑:程序博客网 时间:2024/06/05 09:24
连续讲了几章关于CoordinationLayout的用法,以及Google给我们提供了两个非常强大的Behavior,以及我们自己实现了一个较为简单的Behavior,今天我带领大家通过实现两个简单的效果来讲解一下Behavior,以及实现我们自定义Behavior的效果。
---------------------------分割线---------------------------
如果不熟悉CoordinationLayout的用法,请看我的另外几篇博客:
基本用法:《Android开发之初识CoordinatorLayout》
进阶案列:《Android开发之实现滑动RecyclerView,浮动按钮的显示和隐藏(二)》
案例:《Android开发之给TabLayout加上能消失的ToolBar》
案列:《Android开发之CollapsingToolbarLayout的用法》
---------------------------分割线---------------------------
自定义Behavior:继承CoordinatorLayout.Behavior重写里面几个关键的方法。
一:boolean layoutDependsOn(CoordinatorLayout parent, View child,View dependency):
1.用来决定需要监听哪些控件或者容器的状态(1.知道监听谁;2.什么状态改变)。
2.CoordinatorLayout parent :父容器
3.View child:子控件(需要监听dependency这个view的视图们,也可称为观察者)
4.View dependency:你要监听的那个View
二:onDependentViewChanged(CoordinatorLayout parent, View child,View dependency)
1.当被监听的view发生改变的时候回调。
2.可以在此方法里面做一些响应的联动动画等效果。
---------------------------分割线---------------------------
ok我们来看第一个小案例:
下面贴出代码:
import android.animation.ObjectAnimator;import android.content.Context;import android.support.design.widget.CoordinatorLayout;import android.support.v4.view.ViewCompat;import android.util.AttributeSet;import android.view.View;import android.widget.TextView;/** * Created by Fly on 2017/5/13. */public class CustomBehavior extends CoordinatorLayout.Behavior<View> { public CustomBehavior(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) { //可以根据ID或者TAG来判断 return dependency instanceof TextView || super.layoutDependsOn(parent, child, dependency); } @Override public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) { //获取被监听的view的状态---垂直方向位置 int offset = dependency.getTop() - child.getTop(); //让child进行平移 ViewCompat.offsetTopAndBottom(child, offset); ObjectAnimator oa = ObjectAnimator.ofFloat(child, "rotationX", 0f, 360f); oa.setDuration(500); oa.start(); return true; }}
布局:
<TextView android:layout_width="80dp" android:layout_height="80dp" android:layout_gravity="right|top" android:background="#5c3535" android:text="观察者" app:layout_behavior="com.fly.lsn19_custombehavior.CustomBehavior" />---------------------------分割线---------------------------
第二个小案例:
代码奉上:
import android.content.Context;import android.support.design.widget.CoordinatorLayout;import android.support.v4.view.ViewCompat;import android.support.v4.widget.NestedScrollView;import android.util.AttributeSet;import android.view.View;/** * Created by Fly on 2017/5/13. */public class SyncScrollBehavior extends CoordinatorLayout.Behavior<View> { public SyncScrollBehavior(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes) { return (nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL) || super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes); } @Override public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, View child, View target, int dx, int dy, int[] consumed) { int scrollY = target.getScrollY(); child.setScrollY(scrollY); super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed); } @Override public boolean onNestedFling(CoordinatorLayout coordinatorLayout, View child, View target, float velocityX, float velocityY, boolean consumed) { //快速滑动的惯性移动(松开手指后还会有滑动的效果) ((NestedScrollView) child).fling((int) velocityY); return super.onNestedFling(coordinatorLayout, child, target, velocityX, velocityY, consumed); }}---------------------------希望两个小案列能够帮助大家更好的理解---------------------------
- Android开发之自定义Behavior
- Android开发笔记(一百三十七)自定义行为Behavior
- 自定义Behavior之Floating头像
- Android CoordinatorLayout 与自定义Behavior
- Android Study Material Design 十五 深入Behavior以及自定义Behavior
- Android Behavior之相关解析
- UWP开发:自定义Behavior的使用
- 自定义Behavior之Floating控件进阶版
- Material Design 之自定义Behavior的使用
- CoordinatorLayout使用详解之自定义Behavior
- 自定义behavior
- 自定义 Behavior
- 自定义Behavior
- android-嵌套滚动和自定义behavior。
- Behavior Designer行为树之开发案例
- Android开发 之 (协调布局)CoordinatorLayout与(依赖行为)Behavior
- Android Behavior
- 使用ASP.NETAtlas开发检测密码强度的自定义Behavior
- 系统启动流程测试记录
- iframe结构的网站按F5刷新子页面的实现方式
- httpd已经安装,但是/var/www/html网页打不开
- python中的普通方法、类方法和静态方法
- spring两个核心类
- Android开发之自定义Behavior
- linux下查看mysql相关路径以及配置不区分大小写方法
- k-NN算法实现数字识别案例
- 凿壁系列
- centos7.x 安装mysql5.6
- vue组件之间的多种通信方法
- 单例模式
- VB 6.0 与 SQL Server 的两种连接
- IT人员健康信号之眼睛保护