2014-07-25 20 views

cevap

18

Heey Amigo,

kodumu test ettikten sonra, ben küçük bir sorunu gördük. "scaleY" kullandım çünkü bu sadece görünümü "uzatır". Bu, görünümde bir metin veya bir şey varsa, sadece gerecek ve hoş görünmeyecek demektir. Bunun yerine, onun eserleri daha pürüzsüz ValueAnimator ile deneyin

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; 
    } 
} 

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> 

Eski Cevap Sen pivotY(0) yüzden sadece geçer ayarlamak için sadece hatırlamak, ObjectAnimator kullanabilirsiniz alt. Gereksinimlerinizi karşılamak için kendinizle oynayın :)

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

Cevabı güncelledim. "ValueAnimator" öğesini kullanın, görünüm/düzen içinde başka bir metin veya başka bir şey varsa daha iyi çalışır –

İlgili konular