Я просто хочу обратить на SurfaceView и модифицировал некоторые примеры кода из hereрисовать холст в SurfaceView
Если я рисую непосредственно в цикле он работает, но когда я вызываю метод отрисовки Это не работает. Любые идеи, какие могут быть проблемы? Но это то, что я видел в других учебниках, поэтому он должен работать. Конечно, я мог бы использовать draw1. Но я хочу знать, почему onDraw здесь не работает?
public class TestSurefaceView extends Activity {
MySurfaceView mySurfaceView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mySurfaceView = new MySurfaceView(this);
setContentView(mySurfaceView);
}
class MySurfaceView extends SurfaceView implements Runnable{
Thread thread = null;
SurfaceHolder surfaceHolder;
volatile boolean running = false;
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
Random random;
public MySurfaceView(Context context) {
super(context);
surfaceHolder = getHolder();
random = new Random();
}
@Override
public void run() {
while(running){
if(surfaceHolder.getSurface().isValid()){
Canvas canvas = surfaceHolder.lockCanvas();
//draw(canvas); // does not work
draw1(canvas); // works
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
private void draw1(Canvas canvas){
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(3);
int w = canvas.getWidth();int h = canvas.getHeight();
int x = random.nextInt(w-1);
int y = random.nextInt(h-1);
int r = random.nextInt(255);
int g = random.nextInt(255);
int b = random.nextInt(255);
paint.setColor(0xff000000 + (r << 16) + (g << 8) + b);
canvas.drawPoint(x, y, paint);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
draw1(canvas);
}
}
}
Вам не хватает вашего 'setWillNotDraw (false);' call where .... – EpicPandaForce