2014-11-07 9 views
14

Bez włączania layoutParams, czy istnieje inny sposób zmiany rozmiaru, zwinięcia lub rozwinięcia widoku? Widziałem te animacje w niektórych widokach nowego Material Design i nowej aplikacji Android Dialer. Google powiedział, że materiał łatwo zmienia kształt, rozmiar, obrót, kolor itp., Ale nie mogę znaleźć niczego.Animacja rozmiaru widoku w materiale projektu

Czy istnieje kompatybilność wsteczna?

Do tej pory w celu zmiany rozmiaru, zwinąć lub rozwinąć widok Musieliśmy pracować z layoutParams tak na przykład:

public static void collapse(final View v) { 
final int initialHeight = v.getMeasuredHeight(); 

Animation a = new Animation() 
{ 
    @Override 
    protected void applyTransformation(float interpolatedTime, Transformation t) { 
     if(interpolatedTime == 1){ 
      v.setVisibility(View.GONE); 
     }else{ 
      v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime); 
      v.requestLayout(); 
     } 
    } 

    @Override 
    public boolean willChangeBounds() { 
     return true; 
    } 
}; 

a.setDuration((int)(initialHeight/v.getContext().getResources().getDisplayMetrics().density)); 
v.startAnimation(a); 

}

Oto przykład tego, co chcę od nowa Google Android App Dialer:

enter image description here

Odpowiedz

8

myślę ViewPropertyAnimator to, co chcesz. Sprawdź ten link http://developer.android.com/guide/topics/graphics/prop-animation.html#view-prop-animator

Oto przykład:

view.animate().scaleY(endHeight/initialHeight).start()

jest to ta sama animacja, które miało miejsce w kodzie

+0

Korzystanie 'scaleY (..)' nie ma wpływu na układ . Zmieni się tylko widoczny rozmiar elementu, ale nie ilość miejsca zajmowana przez widok w układzie. – Gareth

+0

Yup, właściwość 'PropertyValuesHolder' byłaby lepszą opcją – user3285324