2014-07-25 2 views

Antwort

18

Heey Amigo,

Nach meinem Code zu testen, sah ich ein kleines Problem. Weil ich "scaleY" benutzte, "dehnt" es gerade die Ansicht aus. Das heißt, wenn etwas Text oder etwas in der Ansicht ist, wird es nur gedehnt und sieht nicht gut aus. Versuchen Sie, mit den ValueAnimator stattdessen seinen Werken glatten

public void onClick(View v) 
{ 
    if(!isBig){ 
     ValueAnimator va = ValueAnimator.ofInt(100, 200); 
     va.setDuration(400); 
     va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
      public void onAnimationUpdate(ValueAnimator animation) { 
       Integer value = (Integer) animation.getAnimatedValue(); 
       v.getLayoutParams().height = value.intValue(); 
       v.requestLayout(); 
      } 
     }); 
     va.start(); 
     isBig = true; 
    } 
    else{ 
     ValueAnimator va = ValueAnimator.ofInt(200, 100); 
     va.setDuration(400); 
     va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
      public void onAnimationUpdate(ValueAnimator animation) { 
       Integer value = (Integer) animation.getAnimatedValue(); 
       v.getLayoutParams().height = value.intValue(); 
       v.requestLayout(); 
      } 
     }); 
     va.start(); 
     isBig = false; 
    } 
} 

Die XML:

<RelativeLayout 
    android:layout_width="150dp" 
    android:layout_height="100dp" 
    android:layout_centerHorizontal="true" 
    android:background="@android:color/holo_red_dark" 
    android:onClick="onButtonClick" 
    android:clickable="true"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:text="My Layout"/> 
</RelativeLayout> 

Alte Antwort Sie den ObjectAnimator verwenden können, nur remeber die pivotY(0) so einzustellen es nur auf die bewegt Unterseite. Spielen Sie mit ihr selbst es an Ihre Bedürfnisse anzupassen :)

private boolean isBig = false; 

... 

public void onClick(View v) 
{ 
    v.setPivotY(0f); 
    if(!isBig){ 
     ObjectAnimator scaleY = ObjectAnimator.ofFloat(v, "scaleY", 2f); 
     scaleY.setInterpolator(new DecelerateInterpolator()); 
     scaleY.start(); 
     isBig = true; 
    } 
    else{ 
     ObjectAnimator scaleY = ObjectAnimator.ofFloat(v, "scaleY", 1f); 
     scaleY.setInterpolator(new DecelerateInterpolator()); 
     scaleY.start(); 
     isBig = false; 
    } 
} 
+0

tnx bebé ......;) –

+0

ich die Antwort aktualisiert haben. Verwenden Sie stattdessen den 'ValueAnimator', der besser funktioniert, wenn Sie Text oder etwas anderes in der Ansicht/im Layout haben –

Verwandte Themen