0

キャンバス上に円を周期的に描画する必要がありますが、反復ごとに遅延が発生します。Thread.sleepそれで、私はそれを遅延のための方法を使うスレッドとして実現しました。

これが私のonDraw方法です:

protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);

        if (touching) {
            paint.setStrokeWidth(STROKE_WIDTH);
            paint.setColor(_color);
            paint.setStyle(Paint.Style.FILL);
            Thread background = new Thread(new Runnable() {

                public void run() {
                    // TODO Auto-generated method stub
                    try {

                        while (f<=75){
                            Thread.sleep(100);
                            drawHandler.sendMessage(drawHandler.obtainMessage());
                        }

                    }
                    catch (InterruptedException e) {
                        // TODO: handle exception
                        Log.e("ERROR", "Thread Interrupted");
                    }
                }
            });

            background.start();


        }

これが私のハンドラーです:

private Handler drawHandler = new Handler() {
    public void handleMessage (Message msg) {
        canvas.drawCircle(x, y, f, paint);
    }
};

ハンドラーでcanvasを解決できないため、このコードをコンパイルできません。ハンドラーでキャンバスオブジェクトを送信するにはどうすればよいですか?一般的に、ハンドラーでパラメーターを送信するにはどうすればよいですか?

4

1 に答える 1

3

message.objectを使用して、キャンバスを渡すことができます。しかし、それは描画が機能する方法ではありません。

ハンドラーはビューを特定の状態にしてinvalidateを呼び出し、次にonDrawでその状態を確認し、それに応じて円を描画する必要があります。これは、Androidの描画サイクルにより適切に適合します。

于 2013-01-06T16:16:47.050 に答える