要提高在Android上使用onDraw和onTouchEvent绘制线条的渲染速度,可以尝试以下解决方法:
private Bitmap mBitmap;
private Canvas mCanvas;
@Override
protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight) {
super.onSizeChanged(width, height, oldWidth, oldHeight);
mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(mBitmap, 0, 0, null);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mCanvas.drawPoint(x, y, mPaint);
invalidate();
break;
case MotionEvent.ACTION_MOVE:
mCanvas.drawLine(mLastX, mLastY, x, y, mPaint);
invalidate();
break;
}
mLastX = x;
mLastY = y;
return true;
}
private List> mLines = new ArrayList<>();
@Override
protected void onDraw(Canvas canvas) {
for (Pair line : mLines) {
canvas.drawLine(line.first, line.second, line.first, line.second, mPaint);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mLines.add(new Pair<>(x, y));
invalidate();
break;
case MotionEvent.ACTION_MOVE:
mLines.add(new Pair<>(x, y));
invalidate();
break;
}
return true;
}
这是一些改进渲染速度的方法,具体取决于你的需求和应用场景。你可以根据实际情况选择适合你的解决方法。