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="http://schemas.android.com/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)这个构造必须写,不然会崩溃

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

android behavior 自定义,自定义Behavior相关推荐

  1. Android开发笔记(一百三十七)自定义行为Behavior

    协调布局CoordinatorLayout能够让内部的子控件互相配合着移动,这跟以往孤立的控件运动截然不同,协调运动的结果,意味着App画面更加流畅.自然,也更符合日常生活中的动作场景.如果你对Coo ...

  2. Android:自定义CoordinatorLayout.behavior 简单的仿UC首页

    CoordinatorLayout顾名思义协调布局,是用来协调该布局下的子控件,最简单地使用就是头部伸缩和折叠了,配合着TabLayout,只需要设置一下AppBarLayout子控件的layout_ ...

  3. Android使用xml自定义软键盘效果(附源码)

    Android使用xml自定义软键盘效果原理: 1,软键盘其实是个控件,使用android.inputmethodserver.KeyboardView类定义. 2,主布局中使用帧布局,当我们需要显示 ...

  4. android 自定义dialog 定时关闭,Android编程实现自定义Dialog的大小自动控制方法示例...

    本文实例讲述了Android编程实现自定义Dialog的大小自动控制方法.分享给大家供大家参考,具体如下: Android应用开发中,无论是出于功能还是增加用户体验,弹出对话框(Dialog)进行一些 ...

  5. 如何在android中创建自定义对话框?

    本文翻译自:How to create a Custom Dialog box in android? I want to create a custom dialog box like below ...

  6. 针对Android Tv的自定义RecyclerView2 0横竖向连动

    版权声明:本文为博主原创文章,转载请注明出处. 推荐: 欢迎关注我创建的Android TV 简书专题,会定期给大家分享一些AndroidTv相关的内容: www.jianshu.com/c/37ef ...

  7. android 自定义actionbar前面有一块空白,解决Android V7后自定义Toolbar、ActionBar左侧有空白问题...

    如图所示: 1.查看Wiget.AppCompat.Toolbar的parent主题,如下所示: @style/TextAppearance.Widget.AppCompat.Toolbar.Titl ...

  8. android标尺自定义view,android尺子的自定义view——RulerView详解

    项目中用到自定义尺子的样式: 原效果为 因为跟自己要使用的view稍有不同 所以做了一些修改,修改的注释都放在代码中了,特此记录一下. 首先是一个自定义View: public class RuleV ...

  9. android 继承dialog自定义对话框

    android  继承dialog自定义对话框 样式如下: 代码实现: 主要Activity: public class MainActivity extends Activity { Button ...

  10. android如何让自定义控件居中,Android自定义控件之自定义TextView,实现drawableLeft可以和文字一起居中...

    如何实现使用TextView的DrawableLeft使图片和文字居中显示呢??? 代码如下: 1.首先自定义一个类,继承TextViewpackage com.test.signcalendar.w ...

最新文章

  1. Angular19 自定义表单控件
  2. Java-J2SE专题复习
  3. android ViewPager页面左右滑动切换
  4. 树莓派GPIO的两种模式区别
  5. 新加坡科技设计大学(SUTD)招收计算机视觉方向全奖PhD学生
  6. MySQL优化的一些基础
  7. [zt]OJ常见的Judge Status
  8. java 调用gpu_GPU使用设置
  9. 谷歌中文为什么以红色高亮关键字
  10. 终级免杀之PcShare Vs KV2006
  11. 使用MVC结构计算梯形面积
  12. 玩转WSL 2(一)——WSL的介绍和安装
  13. LTE系统信息(1)-MIB
  14. 大数据lambda架构实现方案
  15. Altium Designer 18中的Violations Associated with Documents
  16. Linux中vmstat命令详解
  17. 给我的电脑右键菜单添加{管理}菜单...
  18. 机器人瓦力船长机器人_机器人瓦力—关于守护和等待的小故事
  19. matlab图形编辑,matlab绘制图形plot属性编辑
  20. 微信开发者工具为什么一直显示:加载中?

热门文章

  1. 联想主板9针开关接线图_单控开关和双控开关有何区别?怎么接线?附!高清开关接线图图解...
  2. 初学者如何选择Linux系统
  3. 数据库损坏解决:数据库已损坏,无法分配空间
  4. 网页全屏文字Css3D旋转特效动画
  5. xxljob 里面的 任务超时时间 在什么地方进行使用,FutureTask类使用详情
  6. 一款新颖的千纸鹤的折法图解
  7. 拖拽上传获取上传文件信息,e.dataTransfer.files始终为空的解决方案
  8. 欢乐颂之鸿蒙系统,华为启动鸿蒙OS开发人员公开Beta测试的第二阶段
  9. Emacs作为图片浏览器
  10. MDaemon 架设邮件服务器案例