我试图在surfaceView上绘制一些东西,即使我使用
它也只渲染了两次setWillNotDraw(假)
如何每次调用onDraw方法,而不仅仅是两次?
代码:
public class MainActivity extends Activity implements SurfaceHolder.Callback {
private static final String TAG = "SurfaceView";
private SurfaceView surfaceView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
surfaceView = new SurfaceView(this);
surfaceView.setWillNotDraw(false);
setContentView(surfaceView);
surfaceView.getHolder().addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
tryDrawing(holder);
surfaceView.setWillNotDraw(false);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int frmt, int w, int h) {
tryDrawing(holder);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {}
private void tryDrawing(SurfaceHolder holder) {
Log.i(TAG, "Trying to draw...");
Canvas canvas = holder.lockCanvas();
if (canvas == null) {
Log.e(TAG, "Cannot draw onto the canvas as it's null");
} else {
drawMyStuff(canvas);
holder.unlockCanvasAndPost(canvas);
}
}
private void drawMyStuff(final Canvas canvas) {
Log.i(TAG, "Drawing...");
Random random = new Random();
canvas.drawRGB(random.nextInt(255), random.nextInt(255), random.nextInt(255));
}
}
答案 0 :(得分:0)
尝试从查看这样扩展自己的类,并在 onDraw()方法中失效:
public class ScreenView extends View {
private Context context;
private Paint paintLine = new Paint(Paint.ANTI_ALIAS_FLAG);
public ViewStats(Context context) {
super(context);
this.context = context;
init();
}
public ViewStats(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
init();
}
public ViewStats(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
init();
}
private void init() {
paintLine.setStyle(Paint.Style.FILL_AND_STROKE);
paintLine.setColor(0xFFE4455B);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec));
}
@Override
protected void onDraw(Canvas canvas) {
Random random = new Random();
canvas.drawRGB(random.nextInt(255), random.nextInt(255), random.nextInt(255));
invalidate();
}
}