卜娃娃|Behavior实战,这交互炸了系列:仿小米音乐歌手详情页,自定义( 三 )
场景2:从初始化状态快速下滑转为展开状态 , 这也和和前面onNestedPreScroll()处理上滑的效果一模一样 , 因此可以复用逻辑 。
场景3:从折叠状态快速下滑转为初始化状态 , 这个过程如下图 , 看起来像是快速下滑停顿的效果 。
这个Behavior主要处理Face部分的ImageView的位移、蒙层的透明度变化 , 这里因为篇幅原因 , 只讲解关键方法 , 具体源码见
publicclassFaceBehaviorextendsCoordinatorLayout.Behavior{privateinttopBarHeight;//topBar内容高度privatefloatcontentTransY;//滑动内容初始化TransYprivatefloatdownEndY;//下滑时终点值privatefloatfaceTransY;//图片往上位移值publicFaceBehavior(Contextcontext,AttributeSetattrs){super(context,attrs);//引入尺寸值intresourceId=context.getResources().getIdentifier("status_bar_height","dimen","android");intstatusBarHeight=context.getResources().getDimensionPixelSize(resourceId);topBarHeight=(int)context.getResources().getDimension(R.dimen.top_bar_height)+statusBarHeight;contentTransY=(int)context.getResources().getDimension(R.dimen.content_trans_y);downEndY=(int)context.getResources().getDimension(R.dimen.content_trans_down_end_y);faceTransY=context.getResources().getDimension(R.dimen.face_trans_y);...}publicbooleanlayoutDependsOn(@NonNullCoordinatorLayoutparent,@NonNullViewchild,@NonNullViewdependency){//依赖ContentViewreturndependency.getId()==R.id.ll_content;}publicbooleanonDependentViewChanged(@NonNullCoordinatorLayoutparent,@NonNullViewchild,@NonNullViewdependency){//计算Content的上滑百分比、下滑百分比floatupPro=(contentTransY-MathUtils.clamp(dependency.getTranslationY(),topBarHeight,contentTransY))/(contentTransY-topBarHeight);floatdownPro=(downEndY-MathUtils.clamp(dependency.getTranslationY(),contentTransY,downEndY))/(downEndY-contentTransY);ImageViewiamgeview=child.findViewById(R.id.iv_face);ViewmaskView=child.findViewById(R.id.v_mask);if(dependency.getTranslationY()>=contentTransY){//根据Content上滑百分比位移图片TransitionYiamgeview.setTranslationY(downPro*faceTransY);}else{//根据Content下滑百分比位移图片TransitionYiamgeview.setTranslationY(faceTransY+4*upPro*faceTransY);}//根据Content上滑百分比设置图片和蒙层的透明度iamgeview.setAlpha(1-upPro);maskView.setAlpha(upPro);//因为改变了child的位置 , 所以返回truereturntrue;}}其实从上面代码也可以看出逻辑非常简单 , 在layoutDependsOn()依赖Content , 在onDependentViewChanged()里计算Content的上、下滑动百分比来处理图片和蒙层的位移、透明变化 。
推荐阅读
- 图麟科技|三种能力是关键,四年内将翻一番背后:图麟科技AI落地实战
- 抖音|抖音地图号赚钱项目解析:一天稳赚1000+的实战操作!
- 职场实战经验|却被女研究生嫌弃收入低,原因曝光,网友:太年轻,程序员年薪40万
- 卜娃娃|下五洋捉鳖,5G正悄悄改变中国,5G到底有什么用?上九天揽月
- 萱草|SQL 单表优化,SQL高级:代码实战
- 蓝色星晨|045-添加资源文件,实战PyQt5:
- 卜娃娃|你还敢买电动汽车吗?,广汽新能源特斯拉又烧了
- 小暖男石头哥|OS 编译 Android 源码,真机实战,Mac
- 卜娃娃|美国要急了眼了,一大国与华为展开5G合作
- 产业气象站|Git实战004:branch分支操作详解