0

私は Java を数週間しか使用していませんが、何が起こっているのかわかりません。

私はキャンバスを作成しており、チュートリアルからこのコードをコピーして貼り付けましたが、実際にコードを設定する方法がわからないために発生するエラーがたくさんあります。チュートリアルは、スレッド化の方法を既に知っている人向けで、私は迷っています。エラーを修正する方法がわかりません。

すなわち:

postInvalidate() は「メソッドではありません」など、組み込みの Android 関数ですが、setWillNotDraw などと同じです。

私は非常に混乱しており、これらのエラーを修正する方法がわかりません。

package com.example.routedrawingtest;

import android.graphics.Canvas;
import android.view.SurfaceHolder;


class PanelThread extends Thread {
        private SurfaceHolder _surfaceHolder;
        private DrawingPanel _panel;
        private boolean _run = false;


        public PanelThread(SurfaceHolder surfaceHolder, DrawingPanel panel) {
            _surfaceHolder = surfaceHolder;
            _panel = panel;
        }


        public void setRunning(boolean run) { //Allow us to stop the thread
            _run = run;


        }
        @Override
        public void run() {
            Canvas c;
            while (_run) {     //When setRunning(false) occurs, _run is 
                c = null;      //set to false and loop ends, stopping thread


                try {


                    c = _surfaceHolder.lockCanvas(null);
                    synchronized (_surfaceHolder) {

                        postInvalidate();
                }
} finally {
                  if (c != null) {
                      _surfaceHolder.unlockCanvasAndPost(c);
                  }
              }
        }
         }




public void surfaceCreated(SurfaceHolder holder) {


setWillNotDraw(false); //Allows us to use invalidate() to call onDraw()


_thread = new PanelThread(getHolder(), this); //Start the thread that
    _thread.setRunning(true);                     //will make calls to 
    _thread.start();                              //onDraw()
}



public void surfaceDestroyed(SurfaceHolder holder) {
try {
    _thread.setRunning(false);                //Tells thread to stop
_thread.join();                           //Removes thread from mem.
} catch (InterruptedException e) {}
}
4

1 に答える 1

0

postInvalidate()およびsetWillNotDraw()は、通常のViewおよびViewGroupベースのグラフィックに適用されます。コードはSurfaceに描画されています。これらのグラフィックスメソッドをこのように組み合わせたり、組み合わせたりすることはできません。

初めてで何をしているのかわからない場合は、Surfaceのものをすべて捨てることをお勧めします。ビューとビューグループに基づいてレイアウトを設計し、そのためのコードを作成する方法を学びます。また、スレッド化も必要ありません。

ここから開始:http://developer.android.com/training/basics/firstapp/index.html

于 2013-03-21T02:56:30.160 に答える