我是Android编码的新手,但我想制作一款带笔的平板电脑应用程序,以便能够手写(我知道那里已经有很多,但我想要自己的)
我收集了来自互联网的一些代码,现在我想要添加一个橡皮擦模式。为此,我正在创建一个Bitmap,然后将其添加到Canvas上。
一切正常,但Bitmap有Bitmap.Configuration.ARGB_8888
,绘制时速度慢,所以它落后了。我尝试了Bitmap.Configuration.RGB_565
并没有遇到任何性能问题,但其他问题还有擦除。
我也发现,它显然与Bitmap的大小有关。我的平板电脑的屏幕分辨率为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();
}
}
如果有人能帮我解决这个问题,我感到非常高兴。
答案 0 :(得分:1)
我自己修理了它。
我意识到我用setBackgroundResource(R.drawable.background)
设置的背景图像的分辨率太高了,我把它降低了,现在它起作用了。我不知道为什么这会影响绘画表现,但这也解释了为什么我没有在互联网上找到任何答案