如何向textView drawable添加动画

时间:2014-02-14 19:30:44

标签: android animation drawable

我已经在我的textView android:drawableLeft="@drawable/ic_launcher"中使用了这一行 在我的xml文件中。

   <TextView
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:drawablePadding="5dp"
    android:gravity="center_vertical"
    android:text="@string/hello_world"
    android:textSize="14sp"
    android:textStyle="bold"
    android:drawableLeft="@drawable/ic_launcher"
    >

</TextView>

现在我想为这个drawable添加动画。 我不知道如何访问此图片。

有任何帮助吗? 提前谢谢

2 个答案:

答案 0 :(得分:11)

如果您在XML中设置drawable,则无法像ImageView的{​​{1}}一样访问它。相反,请从您的XML中省略它,并在getDrawable()

中执行此操作
Activity/Fragment

如果您的可绘制TextView tv = (TextView) view.findViewById(R.id.textView1); AnimationDrawable d = (AnimationDrawable) getResources().getDrawable(R.drawable.ic_launcher); tv.setCompoundDrawables(d, null, null, null); d.start(); 可以像AnimationDrawable一样动画,则应启动动画。致电ic_launcher停止动画。

答案 1 :(得分:9)

要制作像旋转这样的简单动画,您可以执行以下操作:

假设@drawable/ic_launcher是您想要动画的可绘制的 使用适当的值定义some_drawable.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <rotate
            android:drawable="@drawable/ic_launcher"
            android:pivotX="50%"
            android:pivotY="50%"
            android:fromDegrees="0"
            android:toDegrees="180" />
    </item>
</layer-list>

将此drawable作为复合一个分配给TextView:

<TextView
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:drawablePadding="5dp"
    android:gravity="center_vertical"
    android:text="@string/hello_world"
    android:textSize="14sp"
    android:textStyle="bold"
    android:drawableLeft="@drawable/some_drawable"
    >

要开始动画:

int MAX_LEVEL = 10000;

Drawable[] myTextViewCompoundDrawables = myTextView.getCompoundDrawables();
for(Drawable drawable: myTextViewCompoundDrawables) {

    if(drawable == null)
        continue;

    ObjectAnimator anim = ObjectAnimator.ofInt(drawable, "level", 0, MAX_LEVEL);
    anim.start();
}