1

我有一个带有默认图像的图像视图。现在,当我尝试单击它时,我希望它动画显示 4 帧图像。我怎么能做到这一点,我尝试了一种更简单的方法(更愚蠢的方法),将 imageresource 更改了 4 次,正如预期的那样,图像变化如此之快以至于动画图像效果不可见。有任何想法吗?

我尝试了这种方法:

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

它起作用了,但是有没有更好的方法而不用编码太多行?我有 25 种图像,每张图像有 4 帧。

编辑:

我尝试使用 xml 转换文件:

Java 文件:

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文件:

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

这似乎可行,但我不想在过渡中绘制这些图像。我想在过渡中更改背景。我尝试将其更改android:drawable为,android:drawable但它不起作用。

4

2 回答 2

2

事实证明,有一个确切的类:AnimationDrawable

基本上,只需将要在动画中使用的其他图片的帧添加到AnimationDrawable对象,并指定它们应该显示多长时间addFrame(Drawable frame, int duration)

然后设置ImageView显示它应该开始的任何图像并将背景设置为AnimationDrawable您刚刚使用setBackgroundDrawable(Animation)

最后,在onClick监听器中启动动画

编辑:例如

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

然后在你的 onClick 监听器中,调用ad.start

于 2013-01-18T15:24:17.673 回答
0

这取决于您要完成的工作。你没有提供足够的信息来继续

viewproperty animator 真的是最容易使用的东西,看看。它也可以与使用 Nineoldandroids jar 的旧 API 一起使用(google it)

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

ObjectAnimator 和 ValueAnimator 也可用,但实现起来稍微困难一些

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

查看示例包中的 APIdemos,其中有几个示例主要使用 ValueAnimator。 http://developer.android.com/tools/samples/index.html

也有 Sprites 需要考虑,但它基本上是一个位图,你可以使用计时器来编排

于 2013-01-18T15:19:52.407 回答