анимация случайных кадров не работает Android - PullRequest
1 голос
/ 07 ноября 2010

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

1 Ответ

0 голосов
/ 09 ноября 2010

Я нашел проблему, выкладываю решение, может быть, если другие найдут эту проблему, это будет полезно. На самом деле анимация работает, но исходное изображение, которое используется для инициализации ImageView, находится над анимацией, поэтому анимация была невидимой. Теперь я установил ImageView на пустое изображение перед запуском анимации, и теперь анимация видна. Спасибо.

...