Wie programmiere ich ein Höhenlayout als Animation?Wie ändere ich ein Höhenlayout als Animation (programmgesteuert)
zuerst:
nach:
Wie programmiere ich ein Höhenlayout als Animation?Wie ändere ich ein Höhenlayout als Animation (programmgesteuert)
zuerst:
nach:
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;
}
}
tnx bebé ......;) –
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 –