Luke Villanueva
Luke Villanueva

Reputation: 2070

Create animation in imageviews

I have an imageview with a default image. Now when I try to click it, I want it to animate that displays 4 frames of images. How could I accomplish this, I tried a simpler approach (more of a dumb approach) by changing the imageresource 4 times, as expected the image changes so fast that the animating image effect is not visible. Any ideas?

I tried this approach:

Gem = (ImageView)v;
    Gem.setImageResource(com.example.gems.R.drawable.bd1);
    Gem.postDelayed(new Runnable() {
        public void run() {
            Gem.setImageResource(com.example.gems.R.drawable.bd2);
            Gem.postDelayed(new Runnable() {
                public void run() {
                    Gem.setImageResource(com.example.gems.R.drawable.bd3);
                    Gem.postDelayed(new Runnable() {
                        public void run() {
                            Gem.setImageResource(com.example.gems.R.drawable.bd4);
                            Gem.postDelayed(new Runnable() {
                                public void run() {
                                }
                            }, 500);
                        }
                    }, 500);
                }
            }, 500);
        }
    }, 500);

It worked, but is there a better way to this without coding too much lines? I have 25 kinds of images and each image has 4 frames.

EDIT:

I tried using xml transition files:

Java file:

Resources res = this.getResources();
    Gem = (ImageView)v;
    TransitionDrawable transition;

    transition = (TransitionDrawable)
            res.getDrawable(R.drawable.blue_diamond_animation);
    Gem.setImageDrawable(transition);
    transition.startTransition(3000);

xml file:

 <transition xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/bd1"></item>
  <item android:drawable="@drawable/bd2"></item>
  <item android:drawable="@drawable/bd3"></item>
  <item android:drawable="@drawable/bd4"></item>
  <item android:drawable="@drawable/invi"></item>
 </transition>

This seems to work, but I don't want to draw this images in a transition. I want to change the background in a transition. I tried changing this android:drawable to android:drawable but it doesn't work.

Upvotes: 1

Views: 2052

Answers (2)

Chad Campbell
Chad Campbell

Reputation: 321

It turns out that there is an exact class for this: AnimationDrawable

Basically, just add frames with the other pictures to use in the animation to the AnimationDrawable object and specify how long they should display using addFrame(Drawable frame, int duration)

Then set the ImageView to display whatever image it should start with and set the background to the AnimationDrawable you just made using setBackgroundDrawable(Animation)

Lastly, start the animation in the onClick listener

EDIT: FOR EXAMPLE

AnimationDrawable ad = new AnimationDrawable();
ad.addFrame(getResources().getDrawable(R.drawable.image1), 100);
ad.addFrame(getResources().getDrawable(R.drawable.image2), 500);
ad.addFrame(getResources().getDrawable(R.drawable.image3), 300);

ImageView iv = (ImageView) findViewById(R.id.img);
iv.setBackgroundDrawable(animation);

And then in your onClick listener, just call ad.start

Upvotes: 2

Ryan Heitner
Ryan Heitner

Reputation: 13632

It depends on what you are trying to accomplish. You have not given enough info to go on

The viewproperty animator is really the easiest thing to use have a look. It can also be used with older API's using nineoldandroids jar (google it)

http://developer.android.com/reference/android/view/ViewPropertyAnimator.html

The ObjectAnimator and ValueAnimator are also available similar and slightly more difficult to implement

http://developer.android.com/reference/android/animation/ObjectAnimator.html http://developer.android.com/reference/android/animation/ValueAnimator.html

Have a look at the APIdemos in the sample packs there are a few examples mainly using the ValueAnimator. http://developer.android.com/tools/samples/index.html

There are also Sprites to consider but it is basically a bitmap , you can user the timer obect to choreograph

Upvotes: 0

Related Questions