在画布上绘制位图作为线条



现在我正在编写我的小绘图应用程序,其中一项功能将是来自位图的自定义画笔。我以为onTouchEvent((会调用每个动作,在每个像素上绘制位图不会是一个大问题,但是当我快速滑动时,坐标会变慢,并且应用程序会用间隙绘制它。 有人知道如何使用位图从一点画到另一点的线吗?

这里 创建一个数组列表以首先保存点/坐标

ArrayList<PointF> drawPoints=new ArrayList<>();

然后,创建此方法

public void draw1(float x,float y){
PathMeasure pm=new PathMeasure(path1,false);
float fSegmentLen=pm.getLength()/pm.getLength();
Matrix m=new Matrix();
int ox=-pattern.getWidth()/2;
int oy=-pattern.getHeight()/2;
for (int i=1;i<pm.getLength();i+=increment){
pm.getMatrix(fSegmentLen*i,m,PathMeasure.POSITION_MATRIX_FLAG);
m.preTranslate(ox,oy);
//change pattern below to the bitmap you want to draw
drawCanvas.drawBitmap(pattern,m,drawPaint);
invalidate();
}
}

然后在 onTouchEvent 中调用上述方法

@Override
public boolean onTouchEvent(MotionEvent event)  {
float touchX=event.getX();
float touchY=event.getY();
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
firstPointX=touchX;
firstPointY=touchY;
case  MotionEvent.ACTION_MOVE:
drawPoints.add(new PointF(touchX,touchY));
if (drawPoints.size()>=2) {
PointF pointF = drawPoints.get(drawPoints.size()-2);
path1.moveTo(pointF.x, pointF.y);
PointF next = drawPoints.get(drawPoints.size() - 1);
path1.quadTo(pointF.x, pointF.y, next.x, next.y);
//path1.quadTo(firstPointX, firstPointY, next.x, next.y);
draw1(touchX,touchY);
}
invalidate();
path1.reset();
break;
case MotionEvent.ACTION_UP:
drawPoints.clear();
path1.reset();
break;
default:
return false;
}
invalidate();
return true;
}

如果你想在 Kotlin 中使用它,你可以在 Android Studio 中自动将代码转换为 kotlin。 我希望有帮助,让我知道它是否有效

最新更新