示例android api demo中的手绘示例不会通过触摸屏幕上的手指来绘制点/点。在代码中,他们使用Path来画线,有没有办法使用path来画圆或点?
public class MyView extends View {
// int bh = originalBitmap.getHeight();
// int bw = originalBitmap.getWidth();
public MyView(Context c, int w, int h) {
super(c);
mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
// Bitmap mBitmap =
// Bitmap.createScaledBitmap(originalBitmap,200,200,true);
mCanvas = new Canvas(mBitmap);
mPath = new Path();
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
//mBitmapPaint.setColor(Color.YELLOW);
//mBitmapPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
// mBitmap = Bitmap.createBitmap(bw, bh, Bitmap.Config.ARGB_8888);
// mCanvas = new Canvas(mBitmap);
}
@Override
protected void onDraw(Canvas canvas) {
//canvas.drawColor(customColor);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath, mPaint);
}
// //////************touching evants for painting**************///////
private float mX, mY;
private static final float TOUCH_TOLERANCE = 5;
private void touch_start(float x, float y) {
//mCanvas.drawCircle(x, y, progress+1, mPaint);
mPath.reset();
mPath.moveTo(x, y);
//mPaint.setStyle(Paint.Style.FILL);
//mPath.addCircle(x, y, (float) (progress+0.15), Direction.CW);
mCanvas.drawPath(mPath, mPaint);
mX = x;
mY = y;
//mPaint.setStyle(Paint.Style.STROKE);
}
private void touch_move(float x, float y) {
float dx = Math.abs(x - mX);
float dy = Math.abs(y - mY);
if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
mX = x;
mY = y;
}
}
private void touch_up() {
mPath.lineTo(mX, mY);
// commit the path to our offscreen
mCanvas.drawPath(mPath, mPaint);
// kill this so we don't double draw
mPath.reset();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touch_start(x, y);
invalidate();
break;
case MotionEvent.ACTION_MOVE:
touch_move(x, y);
invalidate();
break;
case MotionEvent.ACTION_UP:
touch_up();
invalidate();
break;
}
return true;
} // end of touch events for image
}
这是代码,我应该在代码中编辑什么才能在Finetouch上绘制点/点?
对我来说,一个简单的解决方案就是在touch\u start()中添加以下代码:
mPath.quadTo(x, y, x + 0.1f, y);
很晚才回复,但在touch_start中使用mCanvas.drawPoint(x, y, mPaint);
会更容易。
有没有什么方法可以用路径画圆或点?
与其尝试这样做,不如使用Canvas类中的方法绘制点(浮动x、浮动y、绘画)
。
要在API演示中使用它,您需要更改3件事:
新版本的touch_up()
:
private void touch_up() {
if(mDrawPoint == true) {
mCanvas.drawPoint(mX, mY, mPaint);
} else {
mPath.lineTo(mX, mY);
// commit the path to our offscreen
mCanvas.drawPath(mPath, mPaint);
// kill this so we don't double draw
mPath.reset();
}
}
当我画完一条线后向上移动手指时,它会自动在它旁边画一个点,即线的终点。当我开始一条新的线/曲线时,先前绘制的线将从画布上删除/清除,只留下绘制的点。
你不需要比我的答案更多的修改。你可能忘记实现其中的一部分了。
我在尝试时遇到了同样的问题,并在发布答案之前解决了它。这是因为您在两个不同的画布上绘制,在画布上使用的是onDraw方法,该方法在手指抬起时会丢失,另一个是mCanvas方法,该方法将线条保存在触摸中。这就是为什么触摸屏有一个if(如果)的原因:
如果我们没有移动手指(只是轻敲),那么我们将点绘制到mCanvas上,这样它仍然在下一个onDraw上(将mCanvas绘制到它作为参数接收的画布上,以便在mCanvas上绘制的旧线条和点仍然可见)。
如果移动手指,则将绘制到画布的路径保存到mCanvas,并将其传递给onDraw,以便在竖起手指后仍然存在。
您遇到的问题来自touch_up
函数的ore
部分永远不会执行,因此在touch_up
上,无论是否应该绘制一个点,路径永远不会提交到mCanvas
,因此在下次调用onDraw
时消失。
这很可能源于您在touch_start()
中将mDrawPoint
设置为true,正如我在第2点中所说。但是忘记在touch_move
中将mDrawPoint
设置为false,正如我在第2点中所说。
这是我的touch_move
的样子:
private void touch_move(float x, float y) {
float dx = Math.abs(x - mX);
float dy = Math.abs(y - mY);
if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
mX = x;
mY = y;
mDrawPoint = false;
}
}
本文向大家介绍python 绘制国旗的示例,包括了python 绘制国旗的示例的使用技巧和注意事项,需要的朋友参考一下 国旗是一个国家的象征,它可以反映一个国家的特色和传统,国旗起源于近代的欧洲,是一个国家主权意识不断增强后的必然产物,本文我们使用 Python 来画几面国旗,使用的 Python 库是大家比较熟悉的 turtle。 五星红旗 五星红旗是中华人民共和国的国旗,它是由四颗小的黄五角星
本文向大家介绍python matplotlib绘制三维图的示例,包括了python matplotlib绘制三维图的示例的使用技巧和注意事项,需要的朋友参考一下 作者:catmelo 本文版权归作者所有 链接:https://www.cnblogs.com/catmelo/p/4162101.html 本文参考官方文档:http://matplotlib.org/mpl_toolkits/mpl
我在CSV文件中有一些数据,想打印出来,但图形没有显示出来 这是CSV文件http://www.mediafire.com/file/2gtbxm5adom7m4j/pop.csv
本文向大家介绍Python matplotlib绘制饼状图功能示例,包括了Python matplotlib绘制饼状图功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python matplotlib绘制饼状图功能。分享给大家供大家参考,具体如下: 一 代码 二 运行结果 更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数学运算技巧总结》、《Python数据结
本文向大家介绍python绘制分布折线图的示例,包括了python绘制分布折线图的示例的使用技巧和注意事项,需要的朋友参考一下 用Python 绘制分布(折线)图,使用的是 plot()函数。 一个简单的例子: 结果: 以上就是python绘制分布折线图的示例代码的详细内容,更多关于python绘制分布折线图的资料请关注呐喊教程其它相关文章!
本文向大家介绍Android 曲线图的绘制示例代码,包括了Android 曲线图的绘制示例代码的使用技巧和注意事项,需要的朋友参考一下 本文介绍了Android 曲线图的绘制示例代码,分享给大家,具体如下: 效果展示 效果展示.gif 使用方式 实现思路 横坐标是固定的, 纵坐标需要跟随曲线传入的数值去动态的调整 绘制坐标轴: 纵横交错的网格 根据用户传入坐标数值去绘制坐标轴上的数值 给X轴和Y轴