Android中MaterialDesign使用 (五)自定义Behavior实现UC顶栏效果
16lz
2021-12-04
Android中MaterialDesign使用 (五)CoordinatorLayout之自定义Behavior
Android中MaterialDesign使用 (一)TabLayout+Fragment实现顶部选项卡
Android中MaterialDesign使用 (二)Navigation+Drawerlayout+Toolbar实现简单侧滑菜单
Android中MaterialDesign使用 (三)SnackBar的使用
Android中MaterialDesign使用 (四)CoordinatorLayout初识:AppBarLayout的基本属性
这里主要实现的是用一个简单的自定义Behavior实现一个像UC浏览器顶栏那样的效果
直接上效果图
2909848-eb2a977fcc0e8779.gif同样使用Tablayout,首先需要在项目中加入Design包
dependencies { compile 'com.android.support:design:24.1.1' }
主布局代码:main.xml
<?xml version="1.0" encoding="utf-8"?>
Behavior是Android新出的Design库里新增的布局概念。Behavior只有是CoordinatorLayout的直接子View才有意义。可以为任何View添加一个Behavior。Behavior是一系列回调。让你有机会以非侵入的为View添加动态的依赖布局,和处理父布局(CoordinatorLayout)滑动手势的机会。不过官方只有少数几个Behavior的例子。对于理解Behavior实在不易。开发过程中也是很多坑,下面总结一下CoordinatorLayout与Behavior。
定义继承基类:
public class DrawerBehavior extends CoordinatorLayout.Behavior { public DrawerBehavior(Context context, AttributeSet attrs) { super(context, attrs); }}
继承CoordinatorLayout.Behavior
这里是一个泛型,泛型传递的是你需加入效果的View,比如我这里是给TextView
加效果泛型就指定位TextView
实现:两个必须的方法
@Override public boolean layoutDependsOn(CoordinatorLayout parent, TextView child, View dependency) { return dependency instanceof Toolbar; }@Override public boolean onDependentViewChanged(CoordinatorLayout parent, TextView child, View dependency) { return true; }
上面的两个方法根据名字就看出 layoutDependsOn()
是View依赖于的控件是什么,我这里是依赖于Toolbar所以写法就如上,其它的根据需要而变;第二方法是当依赖的View发生变化时调用,自定义Behavior的主要逻辑就在这个方法中处理!
下面贴上该效果的代码:
/** * Created by zhengliang on 2016/10/10 0010. */public class DrawerBehavior extends CoordinatorLayout.Behavior { private int mStartY; public DrawerBehavior(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean layoutDependsOn(CoordinatorLayout parent, TextView child, View dependency) { return dependency instanceof Toolbar; } @Override public boolean onDependentViewChanged(CoordinatorLayout parent, TextView child, View dependency) { //记录开始的Y坐标 也就是toolbar起始Y坐标 if (mStartY==0){ mStartY = (int) dependency.getY(); } //计算toolbar从开始移动到最后的百分比 float percent = dependency.getY()/mStartY; //改变child的坐标(从消失,到可见) child.setY(child.getHeight()*(1-percent) - child.getHeight()); child.startAnimation(new AlphaAnimation(1,(1-percent))); return true; }}
代码注释很全就不解释了,寝室马上熄灯了,抓紧时间,哈哈!
自定义的Behavior写好以后,需要在使用这个Behavior的View加上:app:layout_behavior
属性
诺:
... app:layout_behavior=".DrawerBehavior" ...
后面跟的值就是你自定义参数的类名:如果像我这样不行请加上完整的包名..
时间刚好...
印象丶亮仔
更多相关文章
- Android与设计模式(4)外观/桥接/MVP
- iphone Android(安卓)JS的使用
- Android(安卓)多线程:线程池理解和使用总结
- Kotlin实现Android顶部导航栏与模块联动
- Android简易实战教程--第三十九话《Chronometer实现倒计时》
- Android之用自定义的shape去实现shadow效果
- Android:控件GridView的使用
- 开始开发Android的使用Eclipse
- Android(安卓)SDK Manager更新不了的解决办法