2010-11-07 2 views
1

Я пытаюсь добиться случайной анимации из набора изображений, где каждый кадр представляет собой случайное изображение из набора изображений. И для этого я использую метод addFrame объекта AnimationDrawable, но анимация не работает. Я пробовал искать различные уроки, пробовал и другие вещи, но ничего не помогло. Ниже мой код программы, кто-нибудь может рассказать, что я делаю неправильно. В макете есть ImageView. Но когда я пытаюсь анимацию из определения анимации xml (что не случайно), она работает. Спасибо и приветствую.случайная анимация кадра не работает android

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

, когда я касаюсь изображения, тогда он только покажет изображение, с которым оно инициализировано, и анимация не начинается. Я попытался выполнить регистрацию, если анимация запущена или нет, она показывает true, что анимация работает, но я не вижу изменений в представлении изображения. – ravi

ответ

0

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

Смежные вопросы