Как добавить анимацию в 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();
}