当前位置: 代码迷 >> Android >> 关于使用TimerTask自动更新View的有关问题
  详细解决方案

关于使用TimerTask自动更新View的有关问题

热度:50   发布时间:2016-04-27 22:12:00.0
关于使用TimerTask自动更新View的问题
如下代码所示:
我设立了一个Timer,通过时间流动改变点的Y坐标,但是图像无法自动刷新,所以我在  TimerTask的run()里面增加了一个 draw.invalidate();为啥一直报错。
public class MainActivity extends Activity {
   LinearLayout linearLayout;
   DrawMap draw;
   Timer mTimer;
   int count=0;
   int x=100;
   int y=100;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       linearLayout=new LinearLayout(this);
       setContentView(linearLayout);
       draw=new DrawMap(this);
       linearLayout.addView(draw);
       shijian();
   }
   public void shijian(){
       mTimer = new Timer();
       TimerTask mTimerTask = new TimerTask() {
           @Override
           public void run() {
               count++;
               y=y+10;
               draw.invalidate();
               System.out.println("---> count=" + count);
               if (count == 60) {
                   mTimer.cancel();
                   System.out.println("---> 取消定时任务");
               }
           }
       };
       //开始一个定时任务
       mTimer.schedule(mTimerTask, 2000, 1500);
   }
   public class DrawMap extends View{
       Paint paint;
       public DrawMap(Context context) {
           super(context);
       }
       protected void onDraw(Canvas canvas){
           paint=new Paint();
           paint.setColor(Color.BLACK);
           paint.setStrokeWidth(40);
           canvas.drawPoint(x,y,paint);
       }
   }
}


------解决思路----------------------

public class MainActivity extends Activity {
   LinearLayout linearLayout;
   DrawMap draw;
   Timer mTimer;
   int count=0;
   int x=100;
   int y=100;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       linearLayout=new LinearLayout(this);
       setContentView(linearLayout);
       draw=new DrawMap(this);
       linearLayout.addView(draw);
       shijian();
   }
   public void shijian(){
       mTimer = new Timer();
       TimerTask mTimerTask = new TimerTask() {
           @Override
           public void run() {
               count++;
               y=y+10;
               handler.sendEmptyMessage(1);//通知Handler更新ui.-------------
               System.out.println("---> count=" + count);
               if (count == 60) {
                   mTimer.cancel();
                   System.out.println("---> 取消定时任务");
               }
           }
       };
       //开始一个定时任务
       mTimer.schedule(mTimerTask, 2000, 1500);
   }
   public class DrawMap extends View{
       Paint paint;
       public DrawMap(Context context) {
           super(context);
       }
       protected void onDraw(Canvas canvas){
           paint=new Paint();
           paint.setColor(Color.BLACK);
           paint.setStrokeWidth(40);
           canvas.drawPoint(x,y,paint);
       }
   }



   private Handler handler = new Handler(){
      protected void handleMessage(Message msg){
        //在这去操作UI.
        draw.invalidate();
      }

   };
}



参考。
  相关解决方案