我是新来的。试图让我的第一场比赛。我需要把透明的png延迟到我的画布,但似乎无法正确。
public LessonsMain(Context context) {
super(context);
// TODO Auto-generated constructor stub
mFujiSensei = getResources().getDrawable(R.drawable.old_man_fuji);
mFujiSensei.setBounds(0,0,mFujiSensei.getIntrinsicWidth(),mFujiSensei.getIntrinsicHeight());
mBackground = getResources().getDrawable(R.drawable.lessons_background);
mBackground.setBounds(0,0,mBackground.getIntrinsicWidth(),mBackground.getIntrinsicHeight());
}
@Override
protected void onDraw(final Canvas canvas) {
super.onDraw(canvas);
mBackground.draw(canvas);
TimerTask task = new TimerTask() {
public void run(){
mFujiSensei.draw(canvas);
}
}; timer.schedule(task, 3000);
}
抱歉还是不明白。我尝试将它放在一个不同的线程中,但它仍然无法正常工作。
public class LessonsMain extends View{
Drawable mBackground;
Drawable mFujiSensei;
Timer timer;
Handler handler;
Runnable runnable;
public LessonsMain(Context context) {
super(context);
// TODO Auto-generated constructor stub
mFujiSensei = getResources().getDrawable(R.drawable.old_man_fuji);
mFujiSensei.setBounds(0,0,mFujiSensei.getIntrinsicWidth(),mFujiSensei.getIntrinsicHeight());
mBackground = getResources().getDrawable(R.drawable.lessons_background);
mBackground.setBounds(0,0,mBackground.getIntrinsicWidth(),mBackground.getIntrinsicHeight());
}
@Override
protected void onDraw(final Canvas canvas) {
super.onDraw(canvas);
mBackground.draw(canvas);
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
TimerTask task = new TimerTask() {
public void run(){
mFujiSensei.draw(canvas);
}
}; timer.schedule(task, 3000);
}
}).start();
}
}
答案 0 :(得分:2)
这里的问题是当timerTask执行时,它不再在UI线程上,因此无法更新视图。你需要做的就是发送给Handler,这样就可以在UI线程上进行绘制。查看this page以获得有关从计时器更新UI的深入说明。