while(i<5){
int len=input.read(bytes);  //读入图像字节流
Bitmap bm=BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
myImageView.setImageBitmap(bm);
Thread.sleep(1000);
         output.write(1);
          i++;
         }请问这段代码有什么问题,我想用ImageView连续显示多张图片,达到动画的效果,但是无论循环多少次,程序总是直到结束才显示图像,这问题纠结了很久了!

解决方案 »

  1.   

    这个放在主线程时间在长点还会弹出Application Not Responding对话框要想动画可以用线程来通知主线程更新显示
      

  2.   

    可以单单使用一个线程的话,也是不行,但每更新一次,new一个线程的话,也不可能,那么如何让一个线程先执行了,然后结束它,下次要用的时候再start,这个可以做到吗?
      

  3.   

    可以阿 线程run方法一结束自动线程就结束了 不用手动结束 给你个参考    class  CRunCount extends Thread{
         Handler uiHandle;
         public CRunCount(Handler handle)
         {
          uiHandle=handle;
         }
    @Override
    public void run() {
    // TODO Auto-generated method stub
    super.run();
    for(int i=0;i<5;i++)
    {
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
                                    //每隔1秒发送消息 由主线程更新UI
    uiHandle.sendMessage(uiHandle.obtainMessage(1, i, 0));
    }
    }
        }
    定义消息处理        Handler handle=new Handler()
             {
    @Override
    public void handleMessage(Message msg) {
    // TODO Auto-generated method stub
    if(msg.what==1)
    {      //这里更新  
    myImageView.setImageBitmap(bm[msg.arg1]); 
    }
    else super.handleMessage(msg);
    }        
             };
    调用      new CRunCount(handle).start();
      

  4.   

    如果你在主线程用这个 Thread.sleep(1000);  会把程序卡死的,
    你只能开多子线程,然后子线程和主线程用handler进行通信,这样才可以的!
      

  5.   

    不会的!只是显示几张图片,还不至于把程序卡死!你可以继承一个view在这个view中定义一个线程,实时的更新图片。然后再把view添加到布局文件main.xml,比如:<com.wyf.wpf.view...../>再给你个地址看看
    http://blog.csdn.net/xiaominghimi/archive/2010/12/26/6099194.aspx
      

  6.   

    你每次循环结束后,需要通知UI线程更新操作啊,调用invalide,应该就能看到每一帧数据了
      

  7.   

    通过用handler解决,具体用法网上很多