2016-01-06 31 views
1

我基本上有兩個問題,可能有單獨的解決方案。Android材質設計:使列表中的按鈕從左至右彈出,並動畫按鈕移動

我附上什麼我談論的一些截圖。當然,這些圖標不被認真對待:https://goo.gl/photos/zrHtt1BrmSdjFEMM8

___________________________ FIRST _____________________________

我有與在該在XML中指定的底部的灰色條(棒A)的應用程序。酒吧中間有一個按鈕A(拼圖)。 在應用程序中按下按鈕A時,我想讓該按鈕滑到右側並粘到屏幕的右側。此時,酒吧A的其餘部分(充滿其他東西)應該消失,變黑,並填充新的按鈕(酒吧B:按鈕A在右邊,並在其左邊的黑色酒吧充滿了按鈕)。 在xml中,我有一個FrameLayout,裏面有兩個組件,兩個都是完全指定的,然後在代碼中,我可以在使第二個可見或不可見的情況之間切換。因此,將按鈕向右移動後,會變成xml中的按鈕B. 有關動畫的Android開發者頁面描述瞭如何在兩個活動之間共享元素,但是如何在xml中的兩個元素之間共享同一活動中的元素?在動畫結束之後,我如何告訴動畫按鈕A實際上與按鈕B相同?

我目前的解決方案是唯一的移動使用TranslateAnimation按鈕,一旦它已到達B按鈕的位置,我做條B可見。但這並不覺得優雅,我覺得必須有一種更好的方式來連接按鈕A和按鈕B,不僅可視,而且可以編程。有沒有辦法?

___________________________ SECOND________________________________

按鈕後已到達按鈕B,從而製成巴B可見,我現在想的黑條(的心)內的按鈕,彈出一個接一個地從左邊到後沒錯,類似他們的谷歌開發者指南中做到:http://material-design.storage.googleapis.com/publish/material_v_4/material_ext_publish/0B08MbvYZK1iNTGRLb2Zud2RUNFE/animation-meaningfultransitions-hierarchicaltiming-4do_large_xhdpi.webm

什麼是那種動畫的叫什麼?我不知道要搜索什麼。一些代碼指針也會很好。

編輯:我現在想通了一些。再次,我不認爲這是最優雅的解決方案,我會很高興提示如何更好地做到這一點。

當添加欣賞到的LinearLayout,我遍歷我想補充,並添加動畫,以他們的元素。我爲每個元素增加一個「延遲」變量,以延遲動畫的開始,以使它們從左到右出現。以下是代碼片段:

private void addLinearLayoutViews() { 
    LinearLayout layout = (LinearLayout) findViewById(R.id.linear_layout); 
    layout.removeAllViewsInLayout(); 

    long delay = 0; 
    for (int i = 0; i < ITEMS.length; ++i) { 
    ImageView v; // fill with stuff 
    v.setVisibility(View.INVISIBLE); 

    PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("scaleX", 0.f, 1.f); 
    PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("scaleY", 0.f, 1.f); 
    PropertyValuesHolder pvhA = PropertyValuesHolder.ofFloat("alpha", 0.f, 1.f); 
    ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(v, pvhX, pvhY, pvhA); 
    animator.setDuration(500); 
    animator.addListener(new AnimatorListenerAdapter() { 
     public void onAnimationStart(Animator animation) { 
     v.setVisibility(View.VISIBLE); 
     } 
    }); 
    animator.setStartDelay(delay); 
    animator.start(); 
    delay +=15; 
    layout.addView(v);   
    } 
} 

提前感謝這麼多!

回答

0

因爲我沒有看到任何其他的答案,我會在Animating 3 parts of a view提供的答案,我複雜的動畫的問題。我使用了「Runnables」,它讓我可以間隔地編程。祝你好運!