私は 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) {}
}