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
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.
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();
}