第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > android behavior 自定义 自定义Behavior

android behavior 自定义 自定义Behavior

时间:2023-11-20 13:11:08

相关推荐

android behavior 自定义 自定义Behavior

1、这是效果

二、使用注意

1、某个view需要监听另一个View的状态(位置、大小、显示状态等)

(需要重写layoutDependsOn( 用来决定需要监听那些控件或者容器的状态),onDependentViewChanged(当被监听的view发生改变的时候回调))

2、某个view需要监听CoordinatorLayout里边所有空间的滑动状态。

(需要重写的方法:onStartNestedScroll(滑动开始的时候回调),onNestedPreScroll(滑动的时候回调),onNestedFling(快速滑动的时候回调),onNestedScroll (滑动的时候回到,可进行滑动事件处理))

注意:能被CoordinatorLayout捕获滑动状态的控件只有,RecyclerView、NestedScrollView、ViewPager

因为我们这里是根据当前点击的textView去移动另一个所以是第一种情况,所以重写上边那两个方法

三、代码

CustomBehavior.java

public class CustomBehavior extends CoordinatorLayout.Behavior{

//为了防止报错

public CustomBehavior(Context context, AttributeSet attrs) {

super(context, attrs);

}

/**

* 用来决定需要监听那些控件或者容器的状态

* @param parent 父容器

* @param child 子控件---需要监听的dependency这个view的视图们(观察者)

* @param dependency 你要监听的那个View

* @return

*/

@Override

public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {

//

return dependency instanceof TextView||super.layoutDependsOn(parent, child, dependency);

}

/**

* 当被监听的view发生改变的时候回调

* 可以在此方法里面做一些响应的联动动画等效果

* @param parent

* @param child

* @param dependency

* @return

*/

@Override

public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {

//获取被监听的view的状态----垂直方向位置

int offset=dependency.getTop()-child.getTop();

ViewCompat.offsetTopAndBottom(child,offset);

return true;

}

}

main.xml

xmlns:app="/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

android:id="@+id/tv1"

android:layout_width="90dp"

android:layout_height="90dp"

android:layout_marginLeft="50dp"

android:layout_marginTop="40dp"

android:background="#ff0"

android:text="被观察--dependent" />

app:layout_behavior="com.xiaofan.test.view.CustomBehavior"

android:layout_width="90dp"

android:layout_height="90dp"

android:layout_marginLeft="180dp"

android:layout_marginTop="40dp"

android:background="#f00"

android:text="观察者" />

MainActivity.java

public class MainActivity extends AppCompatActivity {

private TextView tv1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

tv1 = (TextView)findViewById(R.id.tv1);

tv1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

ViewCompat.offsetTopAndBottom(v,12);

}

});

}

注意:

app:layout_behavior自定义view最好用全路径

CustomBehavior(Context context, AttributeSet attrs)这个构造必须写,不然会崩溃

这个只是个简单的应用,当然还有更复杂的效果可以实现

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