如下代码所示:
我设立了一个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();
}
};
}
参考。