在android平台上我, 有一组图片,我想连续的显示这组图,达到动画的效果,显示完一次循环后,如果用户点击了下一组按钮,就显示下一组图,否则,没隔1s重复显示之前的“动画”。请问该怎么解决呢?    我现在用的是imageview,在timer控件中每隔 1s 就执行一个显示任务,任务是显示我的一组图片,每显示一张sleep(100), 相当于想要每秒10帧。可是图片根本不会更新,执行过程中连我的下一组按钮也看不见了。我用了handler处理消息机制的。谢谢啊!

解决方案 »

  1.   

    理论是可以的,timer运行了吗。上代码。
      

  2.   

    class Holder {
         ImageView img;
         //TextView title;
        }
      public   class ButtonAdapter extends BaseAdapter{
     
         List<Bitmap> l = new ArrayList<Bitmap>();
         LayoutInflater inflater;
         int mGalleryItemBackground;
            private Context mContext;
            Holder holder;

            public ButtonAdapter(Context c)
         {
         mContext=c;      
    getPic();      //TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);
                //mGalleryItemBackground = typedArray.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0);  
         }    
        
         public int getCount() {
         return Integer.MAX_VALUE;
         }     @Override
         public Object getItem(int position) {
         return position;
        
         }     @Override
         public long getItemId(int position) {
         return position;
         }
         @Override
         public View getView(int position, View convertView, ViewGroup parent) {
        
         inflater = LayoutInflater.from(mContext);
         if (convertView == null) {
         convertView = inflater.inflate(
         R.layout.toolbar_row, null);
         holder = new Holder();
        
         holder.img = (ImageView) convertView
         .findViewById(R.id.bar_img);
         convertView.setTag(holder);
         } else {
         holder = (Holder) convertView.getTag();
         }
             
         //holder.img.setBackgroundResource(resIds[position % resIds.length]);
         if(l.isEmpty()==false&&l.get(1)!=null)
         {
        
         holder.img.setImageBitmap(l.get(position%4));
         }
         else  {
         holder.img.setBackgroundResource(R.drawable.notconnected);
         }
             
         return convertView;
         } private void getPic() {
    try{
    for(int i=0;i<4;i++){
    URL url = new URL("http://202.114.255.72/picture"+"/"+i+".gif");
    URLConnection conn = url.openConnection();
    //conn.setConnectTimeout(2000);
    InputStream in = conn.getInputStream();
    l.add( BitmapFactory.decodeStream(in));
    }
    threadflag=0;
    }catch(Exception e){
    e.printStackTrace();
    }
    }
    哥这里有一个从服务器读取并显示图片,你看对你有帮助不
      

  3.   

    timer运行了的,调试是一直有运行的。
      class ScheduleRunTask extends TimerTask {
      
            public void run() {
             Message message = new Message();    
             message.what = 1;    
             handler.sendMessage(message);  
            }
     
        }
     Handler handler = new Handler(){   public void handleMessage(Message msg) { 
     switch (msg.what) {    
     case 1:    
     try
             {
             for(int i=0;i<picPath.size();i++)
             {
             inputStream = new FileInputStream(picPath.get(i));
         bmp = BitmapFactory.decodeStream(inputStream);
                 imageView.setImageBitmap(bmp);
                 Thread.sleep(100);
             }
             }
             catch(Exception ex)
             {
             System.out.print(ex);
             }
     break;    
     }    
     super.handleMessage(msg); 
     }   };运行的代码:new CRunCount(handler).start();
      

  4.   

    class  CRunCount extends Thread{
            Handler uiHandle;
            public CRunCount(Handler handle)
            {
                 uiHandle=handle;
            }
            @Override
            public void run() {
                // TODO Auto-generated method stub
                super.run();
                    Message message = new Message();    
             message.what = 1;    
             handler.sendMessage(message); 
            }
        }
      

  5.   

    Handler里的方法,是在UI线程里执行的,只有执行完毕,UI线程才能刷新界面切记:不能在UI线程里能用 循环+sleep 的方式试图去切换界面建议:
    可以考虑把每一组图片做成一个逐帧动画,思路应该很清晰。
      

  6.   

    恩,发现, 要执行完成之后,才会刷新界面,相当于没有实时性。可是,如果我是要动态的改变textView控件显示的字呢,这样的话,用帧动画不行吧?请指导,谢谢
      

  7.   

    个人愚见,还是用handler消息机制,每次都将字体赋值给textview,实现动态的刷新
      

  8.   

    这种连续的动画用Animation配置可以实现的吧,楼主可以看看
      

  9.   

    给个链接地址吧
    http://www.cnblogs.com/obullxl/archive/2011/06/10/android-animation-frame-dance.html
      

  10.   

    不要用handler 用多线程 OK?
      

  11.   

    即用了多线程,也用了handler,ok的哈