Android SurfaceViewの質問。 サーフェスをSurfaceViewで描画したいが、キャンバスがSimpleDrawメソッドでnullである。なぜですか? いいえ1、キャンバスはnullです。 いいえ2、ClickListenerで実行されるSimpleDrawメソッドは正しく、キャンバスはnullではありません、なぜですか?SurfaceViewを使用するとキャンバスが失敗しキャンバスがヌルになる
1.public class SurfaceTestActivity extends Activity {
SurfaceView sfv;
SurfaceHolder sfh;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sfv=(SurfaceView)findViewById(R.id.surface);
sfh=sfv.getHolder();
SimpleDraw();
}
void SimpleDraw(){
Canvas canvas = sfh.lockCanvas(new Rect(0, 0, 300,
getWindowManager().getDefaultDisplay().getHeight()));
Paint mPaint = new Paint();
mPaint.setColor(Color.GREEN);
mPaint.setStrokeWidth(2);
canvas.drawCircle(150, 150, 80, mPaint);
sfh.unlockCanvasAndPost(canvas);
}
}
2.public class SurfaceTestActivity extends Activity {
Button simpleButton;
SurfaceView sfv;
SurfaceHolder sfh;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
simpleButton=(Button)findViewById(R.id.simple);
sfv=(SurfaceView)findViewById(R.id.surface);
sfh=sfv.getHolder();
simpleButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//SimpleDraw();
}
});
}
void SimpleDraw(){
Canvas canvas = sfh.lockCanvas(new Rect(0, 0, 300,
getWindowManager().getDefaultDisplay().getHeight()));
Paint mPaint = new Paint();
mPaint.setColor(Color.GREEN);
mPaint.setStrokeWidth(2);
canvas.drawCircle(150, 150, 80, mPaint);
sfh.unlockCanvasAndPost(canvas);
}
}
私はあなたの質問でちょっと混乱していますが、「No2、SimpleDrawメソッドをClickListenerで実行すると正しいですか?キャンバスはnullではありません。なぜですか?」 'onClick'メソッドの' SimpleDraw() 'への呼び出しがコメントアウトされて実行されないためですか? – edthethird
私は中国人です、英語はうまくありません.2人は実行できません.1人と2人は違っています。 – user1241763