Я пытаюсь получить случайную анимацию из набора изображений, где каждый кадр является случайным изображением из набора изображений. И для этого я использую метод addFrame объекта AnimationDrawable, но анимация не работает. Я пробовал искать различные учебники, пробовал и другие вещи, но ничего не помогало. Ниже мой код программы, может кто-нибудь сказать, пожалуйста, что я делаю не так. В макете есть 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;
}
}