3 回答
TA贡献1804条经验 获得超7个赞
在github上上传了我的建议 (尽管强烈建议将视图硬件加速用于这种动画,但它适用于所有android版本。对于非硬件加速的设备,位图缓存实现应该更合适)
带有动画的演示视频在此处(导致屏幕投放速度缓慢的帧率。实际性能非常快)
用法:
layout = new ThreeLayout(this, 3);
layout.setAnimationDuration(1000);
setContentView(layout);
layout.getLeftView(); //<---inflate FragmentA here
layout.getMiddleView(); //<---inflate FragmentB here
layout.getRightView(); //<---inflate FragmentC here
//Left Animation set
layout.startLeftAnimation();
//Right Animation set
layout.startRightAnimation();
//You can even set interpolators
说明:
创建了一个新的自定义RelativeLayout(ThreeLayout)和2个自定义动画(MyScalAnimation,MyTranslateAnimation)
ThreeLayout假设其他可见视图具有,则以参数的形式获取左窗格的权重weight=1。
因此,new ThreeLayout(context,3)创建一个具有3个子级的新视图,左侧窗格的总屏幕数为1/3。另一个视图占据了所有可用空间。
它在运行时计算宽度,更安全的实现是在draw()中第一次计算尺寸。而不是post()
缩放和平移动画实际上是调整视图的大小和移动视图,而不是伪[缩放,移动]。注意,fillAfter(true)任何地方都不会使用它。
View2是view1的right_of
和
View3是view2的right_of
设置了这些规则后,RelativeLayout会处理其他所有事情。动画改变了margins(移动中)和[width,height]比例
要访问每个孩子(以便您可以用Fragment对其进行充气,可以调用
public FrameLayout getLeftLayout() {}
public FrameLayout getMiddleLayout() {}
public FrameLayout getRightLayout() {}
下面展示了2个动画
阶段1
--- IN屏幕----------!----- OUT ----
[View1] [_____ View2 _____] [_____ View3_____]
第二阶段
--OUT-!-------- IN屏幕------
[View1] [View2] [_____ View3_____]
- 3 回答
- 0 关注
- 695 浏览
添加回答
举报