behavior使用记录二
2016-12-02 本文已影响17人
space0o0
自定义behavior的使用
本次实现的效果:
点击红色图片,绿色的跟随移动

xml代码:

behavior的代码:
public BehaviorExample2Behavior(Context context, AttributeSet attrs) {
super(context, attires);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
/**
* child为绑定的view,dependency为发生变化的view
*/
return dependency instanceof TextView;
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {
/**
* 当dependency位置发生改变时,计算两个控件水平的距离
* 再设置child的位移
*/
int offSet = (int) (dependency.getX() - child.getX());
ViewCompat.offsetLeftAndRight(child, offSet);
return super.onDependentViewChanged(parent, child, dependency);}
绑定是在xml中进行的,所以需要BehaviorExample2Behavior(Context context, AttributeSet attrs)构造函数。
layoutDependsOn方法:用于关联手动发生变化的控件(红色块位置手动改变)
这里需要搞清楚的就是child和dependency分别对应的控件。
child:绑定的控件,图片中绿色的textview
dependency:发生变化的控件,图中红色的textview
onDependentViewChanged方法:当dependency发生改变的时候,会调用该方法。相应操作说明已经写在了注释中。
再看activity中的代码:

非常简单的逻辑,点击dependency,使该控件向右移动。
实现了NestedScrollingChild的控件