SeniorUI0101_UI绘制流程分析运用(底部动画弹出显示框)

高级UI汇总目录

由前一篇文章:
SeniorUI01_UI绘制流程分析(源码级分析)
我们知道,每一个Activity都有一个Window,Window仅有一个唯一实现类PhoneWindow,包含一个DecorView,所有的布局都是添加到DecorView上的,DecorView继承FrameLayout,因此在有些时候可以利用这点,实现特定效果。
#1 RequireMent
(1)底部弹出操作框
(2)屏幕非操作框区域事件仍响应
(3)显示动画:整体逐渐向上,顶部有曲线波动效果

#2 效果图

这里写图片描述
#3 Theory
(1) 获取Window对应的DecorView,addView形式添加弹框View
(2)封装弹框View实现弹出效果,弹出效果分 外部动画(上升+曲线抖动)和 内部动画(列表内容上升)
(3)内部动画实现:
自定义控件+ ValueAnimator(修改参数,通知重新绘制) + Path(贝塞尔曲线Path.quadTo)
(4)外部动画:RecyclerView 的layoutAnimation 实现

#4 CoreCode
(1)获取DecorView,同时为了保证addView后不遮挡虚拟键,获取导航栏高度,设置bottomMargin
获取DecorView:
getWindow().getDecorView()

获取导航栏高度:
这里写图片描述
添加View

if(rootView.getParent()!=null){
	mParentVG.removeView(rootView);
}
FrameLayout.LayoutParams lp =  new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
lp.bottomMargin = getNavigationHeight(mParentVG.getContext());
mParentVG.addView(rootView,lp);
bouncingView.show();

(2)自定义View实现外部动画效果,同时保留一个监听器,当动画执行到一定时间时通知RecyclerView执行动画

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
(3)RecyclerView实现内部动画
item_duang_show.xml (透明、平移)

这里写图片描述

rv_layout_animation.xml( 定义为layoutAnimation 延迟0.1)
这里写图片描述
收到自定义View的通知,设置数据,执行动画
这里写图片描述

#5 Demo
SeniorUI01_DrawingProcessActivity

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值