Как добавить анимацию в textView 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. Я не знаю, как получить доступ к этому изображению.

Любая помощь? заранее спасибо

Ответ 1

если вы установите для рисования в XML, вы не сможете получить к нему доступ, как вы можете, с помощью ImageView getDrawable(). Вместо этого опустите его из своего XML и сделайте это в 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();

Если ваш drawable ic_launcher можно анимировать, например AnimationDrawable, это должно начать анимацию. Вызовите d.stop(), чтобы прекратить анимацию.

Ответ 2

Чтобы сделать простые анимации, такие как вращение, вы можете сделать что-то вроде этого:

Предположим, что @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>

Назначьте это выделение как составное для вашего 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();
}