Android - отображать серии изображений с помощью ImageView - PullRequest
0 голосов
/ 24 апреля 2011

Я пытаюсь отобразить серии изображений PNG в одном ImageView с помощью таймера (например, менять изображение каждые 1 сек.).

Приложение продолжает падать, вот мой код, пожалуйста, помогите. В main.xml есть ImageView, по какой-то причине я не могу опубликовать полный XML-файл здесь. В любом случае это просто стандартный файл main.xml с дополнительным ImageView в линейном макете.

public class AniImgTest extends Activity {

    ImageView iv;
    public int i=0;
    Timer timer = new Timer();  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

       this.iv=(ImageView)findViewById(R.id.imageView1);
       timer.scheduleAtFixedRate(new TimerTask(){
            @Override
            public void run() {
                Log.v("","myDebug "+i);
                if(i<2)    
                    i++;
                else
                    i=0;

                switch(i){
                case 0:iv.setImageResource(R.drawable.a1); 
                    break;
                case 1:iv.setImageResource(R.drawable.a2); 
                    break;
                case 2:iv.setImageResource(R.drawable.a3); 
                    break;
                }

            }

    }, 0, 5000);

    }
} 

Ответы [ 2 ]

0 голосов
/ 28 ноября 2012

используйте этот блок кода для изменения компонентов пользовательского интерфейса

     AniImgTest.this.runOnUiThread(new Runnable() {

            public void run() {

                // change your image here.
            }
        });
0 голосов
/ 24 апреля 2011

Ваша задача выполняется в потоке, отличном от основного потока, поэтому она не может изменить графический интерфейс и вызывает сбои.Используйте обработчик для выполнения этих задач в главном потоке.

Еще одна вещь (которая не связана, но ...) вместо:

if(i<2)  
    i++;
else
    i=0;
switch(i){

Вы можете написать:

switch(++i % 3){
...