how to add animation to textView drawable

2020-02-06 05:20发布

I have used this line too add image in my textView : android:drawableLeft="@drawable/ic_launcher" in my xml file.

   <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>

Now I want to add animation to this drawable. I dont know how can I access this image.

Any help? thanks in advance

2条回答
兄弟一词,经得起流年.
2楼-- · 2020-02-06 05:58

To make simple animations like rotation you can do something like this:

Assume @drawable/ic_launcher is a drawable you want to animate.
Define some_drawable.xml with the appropriate values:

<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>

Assign this drawable as a compound one to your 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"
    >

To start animation:

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();
}
查看更多
家丑人穷心不美
3楼-- · 2020-02-06 06:02

if you set the drawable in the XML, you won't be able to access it like you can with an ImageView's getDrawable(). Instead, omit it from your XML and do it in your 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();

Provided your drawable ic_launcher can be animated like an AnimationDrawable, this should start the animation. Call d.stop() to cease animation.

查看更多
登录 后发表回答