这交互炸了系列:仿幼米音笑歌手细目页,自定义 Behavior实战
发布时间:2020-07-03
基本玩转嵌套起伏。

PS:感谢行家,这篇文章手把手基于自定义Behavior实现幼米音笑歌手细目页。

https://juejin.im/post/5ede39ebe51d45788a6d6ee8

github地址:

https://github.com/pengguanming/MiMusicBehavior

造就预览

睁开全文

apk下载地址:

https://raw.githubusercontent.com/pengguanming/MiMusicBehavior/master/app/release/app-release.apk

造就分析

组织主要有上图四片面构成,逻辑上的层级如图所示有2层。

滑动Content片面时行使View的TransitionY属性转折位置来消耗滑动值,偏重于控件的尺寸和位置,让吾褥了益几年...

1

概述

之前的《浅析NestedScrolling嵌套滑动机制之CoordinatorLayout.Behavior》带行家晓畅CoordinatorLayout.Behavior的原理和基本行使,2 篇基础产品展示,昨天很给力产品展示,而Face、TopBar、TitleBar片面的Behavior倚赖Content产品展示,完善组织请参考:

activity_main.xml

https://github.com/pengguanming/MiMusicBehavior/blob/master/app/src/main/res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

< android.support.design.widget.CoordinatorLayout

android:layout_width= "match_parent"

android:layout_height= "match_parent">

<!--face片面-->

< FrameLayout

android:layout_width= "match_parent"

android:layout_height= "wrap_content"

app:layout_behavior= "com.pengguanming.mimusicbehavior.behavior.FaceBehavior">

< ImageView

android:id= "@ id/iv_face"

android:layout_width= "match_parent"

android:layout_height= "500dp"

android:scaleType= "centerCrop"

android:src= "@mipmap/jj"

android:tag= "iv_face"

android:translationY= "@dimen/face_trans_y"/>

< View

android:id= "@ id/v_mask"

android:layout_width= "match_parent"

android:layout_height= "500dp"/>

</ FrameLayout>

<!--face片面-->

<!--TopBar片面-->

< com.pengguanming.mimusicbehavior.widget.TopBarLayout

android:id= "@ id/cl_top_bar"

android:layout_width= "match_parent"

android:layout_height= "@dimen/top_bar_height"

app:layout_behavior= "com.pengguanming.mimusicbehavior.behavior.TopBarBehavior">

< ImageView

android:id= "@ id/iv_back"

.../>

< TextView

android:id= "@ id/tv_top_bar_name"

a.../>

< com.pengguanming.mimusicbehavior.widget.DrawableLeftTextView

android:id= "@ id/tv_top_bar_coll"

.../>

</ com.pengguanming.mimusicbehavior.widget.TopBarLayout>

<!--TopBar片面-->

<!--TitleBar片面-->

< android.support.constraint.ConstraintLayout

android:id= "@ id/cls_title_bar"

android:layout_width= "match_parent"

android:layout_height= "48dp"

app:layout_behavior= "com.pengguanming.mimusicbehavior.behavior.TitleBarBehavior">

< TextView

.../>

< com.pengguanming.mimusicbehavior.widget.DrawableLeftTextView

.../>

</ android.support.constraint.ConstraintLayout>

<!--TitleBar片面-->

<!--Content片面-->

< LinearLayout

android:id= "@ id/ll_content"

android:layout_width= "match_parent"

android:layout_height= "match_parent"

android:orientation= "vertical"

android:translationY= "@dimen/content_trans_y"

app:layout_behavior= "com.pengguanming.mimusicbehavior.behavior.ContentBehavior">

< com.flyco.tablayout.SlidingTabLayout

android:id= "@ id/stl"

.../>

< android.support.v4.view.ViewPager

android:id= "@ id/vp"

.../>

</ LinearLayout>

<!--Content片面-->

</ android.support.design.widget.CoordinatorLayout>

ContentBehavior

这个Behavior主要处理Content片面的Measure、嵌套滑动。

绑定必要做造就的View、引入Dimens、测量Content片面的高度

从上面图片能够分析出:

折叠状态时产品展示,倘若你能十足汲取,那时就有许众留言说 CoordinatorLayout也能实现,自定义 Behavior实战

本文作者

作者:彭冠铭

之前推送过作者的:

这交互炸了系列:仿饿了么商家细目页,Content片面高度=满屏高度-TopBar片面的高度

publicclassContentBehaviorextendsCoordinatorLayout. Behavior{

privateinttopBarHeight; //topBar内容高度

privatefloatcontentTransY; //滑动内容初起化TransY

privatefloatdownEndY; //下滑时尽头值

privateView mLlContent; //Content片面

publicContentBehavior(Context context){

this(context, null);

}

publicContentBehavior(Context context, AttributeSet attrs){

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);

...

}

@Override

publicbooleanonMeasureChild(@NonNull CoordinatorLayout parent, View child,产品展示

intparentWidthMeasureSpec, intwidthUsed,

intparentHeightMeasureSpec, intheightUsed) {

finalintchildLpHeight = child.getLayoutParams.height;

if(childLpHeight == ViewGroup.LayoutParams.MATCH_PARENT

,监听Content片面的TransitionY设定各栽周围从而计算百分最近实走位移、Alpha造就。

下面来表明上图中变量的意义:

topBarHeight; //topBar高度

contentTransY; //滑动内容初起化TransY

downEndY; //content下滑的最大值

content片面的上滑周围=[topBarHeight,contentTransY]

content片面的下滑周围=[contentTransY,downEndY]

2

代码实现

组织

下面是组织要点,实在,2 篇实战,这不文章就来了。

作者这个系列统统 4 篇,嵌套起伏机制实战篇

十足是行使嵌套起伏机制实现的

原标题:华为甘斌:5G将驱动联接、AI、云、计算、行业应用五大产业升级

昨日记者从北京市网信办获悉,根据国家网信办等8部门开展的网络直播专项整治和规范管理工作统一部署,6月22日,北京市互联网信息办公室依法约谈“花椒直播”“西瓜视频”“全民小视频”3家属地网络直播平台相关负责人,针对平台存在的传播低俗庸俗内容、未能有效履行企业主体责任问题,责令3家网络直播平台自6月23日0时至7月8日0时限期整改,整改期间暂停新用户注册、全面清理违规内容、处理相关责任人员。

据“防务新闻”6月30日报道,美国太空军于6月29日公布了其组织架构——由太空作战司令部、太空系统司令部和太空训练战备司令部三个司令部构成。