随机帧动画不适用于android

时间:2010-11-07 20:40:41

标签: android animation random imageview

我正在尝试从一组图像中实现随机动画,其中每个帧是来自图像集的随机图像。为此,我使用的是AnimationDrawable对象的addFrame方法,但动画无效。我尝试搜索各种教程,尝试了其他的东西,但没有任何帮助。以下是我的程序代码,任何人都可以告诉我我做错了什么。在布局中有一个ImageView。但是当我从xml动画定义(非随机)尝试动画时,它可以工作。谢谢和问候。

import java.util.Random;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

public class MemoryGame extends Activity implements OnTouchListener{
MemoryGameView mgv;
ImageView memImg;
int []seqimg = new int[15];
AnimationDrawable animation; 

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.memorylayout);
    memImg = (ImageView) findViewById(R.id.mem_img);
    memImg.setOnTouchListener(this);

    //generate the random sequence of list
    randomImgList();
    defAnimation();
  }

//select the array of random sequence of images for viewing
private void randomImgList(){
    //initialize the sequece
    for (int i = 0; i < 15; i++) {
        seqimg[i] = i+1;
    }
    Random rng = new Random();
    // i is the number of items remaining to be shuffled.
    for (int i = 15; i > 1; i--) {
        // Pick a random element to swap with the i-th element.
        int j = rng.nextInt(i);  // 0 <= j <= i-1 (0-based array)
        // Swap array elements.
        int tmp = seqimg[j];
        seqimg[j] = seqimg[i-1];
        seqimg[i-1] = tmp;
    }
}
//define the animation sequece
private void defAnimation() {
    animation = new AnimationDrawable();
    for(int i=0; i<10; i++) {
        String imgName = "mimg" + seqimg[i];
        int id = getResources().getIdentifier(imgName, "drawable", getPackageName());
        Log.d("id",""+id);
        animation.addFrame(getResources().getDrawable(id), 1000);
    }
    animation.setOneShot(true);
}

//define the touch event from the OnTouchListener interface
public boolean onTouch(View v, MotionEvent arg1) {
    if(v.getId() == memImg.getId()) {
        memImg.setBackgroundDrawable(animation);
        animation.setVisible(true, true);
        animation.stop();
        animation.start();
    }
    return true;
}
}

1 个答案:

答案 0 :(得分:0)

我发现了问题,我发布解决方案可能如果其他人发现这个问题会有所帮助。 实际上动画正在运行,但用于初始化ImageView的初始图像位于动画上方,因此动画是不可见的。现在我在开始动画之前将ImageView设置为空白图像,现在可以看到动画。 感谢。