我需要在画布上延迟绘图

时间:2011-11-16 14:34:15

标签: android

我是新来的。试图让我的第一场比赛。我需要把透明的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();


}

}

1 个答案:

答案 0 :(得分:2)

这里的问题是当timerTask执行时,它不再在UI线程上,因此无法更新视图。你需要做的就是发送给Handler,这样就可以在UI线程上进行绘制。查看this page以获得有关从计时器更新UI的深入说明。