3 回答

TA貢獻1804條經(jīng)驗 獲得超7個贊
在github上上傳了我的建議 (盡管強烈建議將視圖硬件加速用于這種動畫,但它適用于所有android版本。對于非硬件加速的設(shè)備,位圖緩存實現(xiàn)應(yīng)該更合適)
帶有動畫的演示視頻在此處(導(dǎo)致屏幕投放速度緩慢的幀率。實際性能非??欤?/p>
用法:
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
說明:
創(chuàng)建了一個新的自定義RelativeLayout(ThreeLayout)和2個自定義動畫(MyScalAnimation,MyTranslateAnimation)
ThreeLayout假設(shè)其他可見視圖具有,則以參數(shù)的形式獲取左窗格的權(quán)重weight=1。
因此,new ThreeLayout(context,3)創(chuàng)建一個具有3個子級的新視圖,左側(cè)窗格的總屏幕數(shù)為1/3。另一個視圖占據(jù)了所有可用空間。
它在運行時計算寬度,更安全的實現(xiàn)是在draw()中第一次計算尺寸。而不是post()
縮放和平移動畫實際上是調(diào)整視圖的大小和移動視圖,而不是偽[縮放,移動]。注意,fillAfter(true)任何地方都不會使用它。
View2是view1的right_of
和
View3是view2的right_of
設(shè)置了這些規(guī)則后,RelativeLayout會處理其他所有事情。動畫改變了margins(移動中)和[width,height]比例
要訪問每個孩子(以便您可以用Fragment對其進行充氣,可以調(diào)用
public FrameLayout getLeftLayout() {}
public FrameLayout getMiddleLayout() {}
public FrameLayout getRightLayout() {}
下面展示了2個動畫
階段1
--- IN屏幕----------!----- OUT ----
[View1] [_____ View2 _____] [_____ View3_____]
第二階段
--OUT-!-------- IN屏幕------
[View1] [View2] [_____ View3_____]
- 3 回答
- 0 關(guān)注
- 726 瀏覽
添加回答
舉報