2012-10-11 78 views
3

我已經爲此擱置了很長一段時間了。我試圖將包含在FrameLayout中的片段移動到右側,以便只有左側20%的片段可見。將部分片段移出屏幕

我想我遇到的問題是,父母不會讓片段超出邊界,或者我不知道如何移動它。我所嘗試過的所有東西都只是將片段推向右側牆壁,然後將片段縮放以適合。我需要它將右邊牆外的碎片推開。任何幫助將不勝感激。

我試圖達到的最終效果是,當您推送穿戴片段翻譯成全視圖,然後按一個按鈕翻譯回20%的觀點。我有所有的動畫設置,只是片段的實際移動困擾着我。

+0

你是什麼意思?「我有動畫全部設置好了,只是片段的實際移動將我絆倒了」?這些言論似乎相互矛盾。您也可以在一兩個月前詢問以下問題(並回答以及其他答案):http://stackoverflow.com/questions/12253965/complete-working-sample-of-the-gmail-三片段動畫場景 – CommonsWare

+0

這意味着雖然它具有動畫效果,但並不意味着片段本身就是動畫看起來像的地方。它仍然會在原始位置收到OnClick事件,直到其實際移動。 – WIllJBD

+0

此外,這個例子並不能幫助我,我試圖將它部分地移出屏幕,而不是將它邊緣化。 – WIllJBD

回答

2

這意味着雖然它具有動畫效果,但並不意味着片段本身就是動畫看起來像的地方。它仍然會在原始位置收到OnClick事件,直到其實際移動。

您可能正在使用舊式動畫(例如,TranslateAnimation),它們是爲瞬態效果設計的,而不是永久性效果。

我指出a related question of mine的原因在於很多解決方案,包括my own solution都使用新的動畫設計框架,該框架專爲持久效果而設計。

此外,這個例子並沒有幫助我,我試圖將它部分地移出屏幕,而不是僅僅把它放在邊緣上。

特別是對於動畫構架而言,「將其部分移出屏幕」和「將其向邊緣碾壓」之間沒有實質性區別。例如,如果你讀了我的解決方案,你會看到一個translateWidgets()方法展示了一組控件中的水平滑動:

private void translateWidgets(int deltaX, View... views) { 
    for (final View v : views) { 
     v.setLayerType(View.LAYER_TYPE_HARDWARE, null); 

     v.animate().translationXBy(deltaX).setDuration(ANIM_DURATION) 
     .setListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationEnd(Animator animation) { 
      v.setLayerType(View.LAYER_TYPE_NONE, null); 
     } 
     }); 
    } 
    } 

在你的情況,deltaX是任何適當的值來實現你20 %效果(大概0.2f乘以容器的寬度,或沿着這些行的東西),或者當應該看到完整片段時撤消該效果。

我的答案包含完整示例項目的鏈接,包括原生API級別11動畫師和使用動畫師框架的NineOldAndroids backport。

+0

謝謝,我找到了一種不同的方式來完成,但感謝您的幫助。 – WIllJBD

+1

你能提供解決方案嗎? – Bjarke

+1

@WIllJBD你會介意分享你的解決方案,將片段部分移出屏幕......我也從過去的一週一直無能爲力......請幫助我...提前謝謝... –