使用 ObjectAnimator 为 TextView 的 leftDrawable 设置动画
Animating TextView's leftDrawable using ObjectAnimator
我想为 TextView
的 leftDrawable
制作动画,我尝试了以下方法:
ObjectAnimator.ofFloat(drawable, "rotation", 0f, 360f).setDuration(300).start();
button.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
但它似乎没有动画,过去我使用过 AnimationDrawable
并且它通过将几个可绘制对象放在 <animation-list>
中来工作,但是 apk 大小是一个问题所以我'我试图避免拥有多个资产来实现这一目标。
如果我做错了什么或者使用 ObjectAnimator
无法实现,请告诉我。
谢谢。
我认为问题在于您在绘制可绘制对象之前调用动画开始。
尝试替换行的顺序。也许你可以增加一些延迟。
试试这个:
TextView tv = new TextView(this);
Drawable left = getResources().getDrawable(R.drawable.rotate);
tv.setCompoundDrawablesWithIntrinsicBounds(left, null, null, null);
final ObjectAnimator animator = ObjectAnimator.ofInt(left, "level", 0, 10000).setDuration(1000);
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "onClick ");
animator.start();
}
};
tv.setOnClickListener(listener);
tv.setGravity(Gravity.CENTER);
tv.setTextSize(48);
tv.setText("click me");
setContentView(tv);
res/drawable/rotate.xml 看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0" android:toDegrees="720">
<bitmap android:src="@drawable/ic_launcher"/>
</rotate>
我想为 TextView
的 leftDrawable
制作动画,我尝试了以下方法:
ObjectAnimator.ofFloat(drawable, "rotation", 0f, 360f).setDuration(300).start();
button.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
但它似乎没有动画,过去我使用过 AnimationDrawable
并且它通过将几个可绘制对象放在 <animation-list>
中来工作,但是 apk 大小是一个问题所以我'我试图避免拥有多个资产来实现这一目标。
如果我做错了什么或者使用 ObjectAnimator
无法实现,请告诉我。
谢谢。
我认为问题在于您在绘制可绘制对象之前调用动画开始。 尝试替换行的顺序。也许你可以增加一些延迟。
试试这个:
TextView tv = new TextView(this);
Drawable left = getResources().getDrawable(R.drawable.rotate);
tv.setCompoundDrawablesWithIntrinsicBounds(left, null, null, null);
final ObjectAnimator animator = ObjectAnimator.ofInt(left, "level", 0, 10000).setDuration(1000);
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "onClick ");
animator.start();
}
};
tv.setOnClickListener(listener);
tv.setGravity(Gravity.CENTER);
tv.setTextSize(48);
tv.setText("click me");
setContentView(tv);
res/drawable/rotate.xml 看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0" android:toDegrees="720">
<bitmap android:src="@drawable/ic_launcher"/>
</rotate>