我是 Android 编码的新手,但我想为带有笔的平板电脑制作一个能够手写的应用程序(我知道那里已经有很多,但我想要我自己的)
我从整个 Internet 上收集了一些代码,现在我想添加橡皮擦模式。为此,我正在创建一个位图,然后将其添加到 Canvas 上。
一切正常,但是 Bitmap 有 Bitmap.Configuration.ARGB_8888
并且在绘制时速度很慢,所以它落后了。我尝试了 Bitmap.Configuration.RGB_565
并且没有性能问题,但有其他删除问题。
我还发现,这显然与位图的大小有关。我的平板电脑的屏幕分辨率为 1920x1200。当我创建只有 1557x1000
的位图时,我没有性能问题,但是当我将它增加到 1558x1000
或更高时,它又开始滞后。
这是我的部分代码:
DrawView类:
public class DrawView extends SurfaceView implements View.OnTouchListener{
private Paint paint;
private Paint bitmapPaint;
private Path path;
private Canvas canvas;
private Bitmap mBitmap;
private int currentColor;
private float currentStrokeWidth;
private boolean eraserMode = false;
public DrawView(Context context, AttributeSet attr) {
super(context, attr);
path = new Path();
paint = new Paint();
bitmapPaint = new Paint(Paint.DITHER_FLAG);
this.setOnTouchListener(this);
paint.setAntiAlias(true);
paint.setDither(true);
paint.setFilterBitmap(false);
// ... setting Color and StorkeWidth to paint
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
canvas = new Canvas(mBitmap);
}
@Override
protected void onDraw(Canvas c){
c.drawBitmap(mBitmap, 0, 0, bitmapPaint);
c.drawPath(path, paint);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touch_start(eventX, eventY);
break;
case MotionEvent.ACTION_MOVE:
touch_move(eventX, eventY);
break;
case MotionEvent.ACTION_UP:
touch_up();
break;
default:
return false;
}
invalidate();
}
return true;
}
private float mX, mY;
private void touch_start(float x, float y) {
path.moveTo(x, y);
mX = x;
mY = y;
}
private void touch_move(float x, float y) {
path.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
canvas.drawPath(path, paint);
mX = x;
mY = y;
}
private void touch_up() {
canvas.drawPath(path, paint);
path.reset();
}
}
如果有人能帮我解决这个问题,我很高兴。
最佳答案
我自己修的。
我意识到我使用 setBackgroundResource(R.drawable.background)
设置的背景图片分辨率太高,我降低了它,现在可以使用了。我不知道为什么这会影响绘图性能,但这解释了为什么我在互联网上没有找到任何答案
关于java - Android canvas.drawBitmap 使用 ARGB_8888 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40664015/