我正在尝试从一组图像中实现随机动画,其中每个帧是来自图像集的随机图像。为此,我使用的是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;
}
}
答案 0 :(得分:0)
我发现了问题,我发布解决方案可能如果其他人发现这个问题会有所帮助。 实际上动画正在运行,但用于初始化ImageView的初始图像位于动画上方,因此动画是不可见的。现在我在开始动画之前将ImageView设置为空白图像,现在可以看到动画。 感谢。