java - 在 ImageView 上绘图
问题描述
我正在尝试在图像上绘制,稍后我将与图纸一起保存。我的 xml 只有 ImageView,我试图覆盖 onDraw。它只制作了 de Canvas 作品,但没有图像。
public class Body1 extends View {
public LayoutParams params;
private Path path = new Path();
private Paint brush = new Paint();
public Body1(Context context) {
super(context);
brush.setAntiAlias(true);
brush.setColor(Color.MAGENTA);
brush.setStyle(Paint.Style.STROKE);
brush.setStrokeJoin(Paint.Join.ROUND);
brush.setStrokeWidth(8f);
params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float pointX = event.getX();
float pointY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path.moveTo(pointX, pointY);
return true;
case MotionEvent.ACTION_MOVE:
path.lineTo(pointX, pointY);
break;
default:
return false;
}
postInvalidate();
return false;
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawPath(path, brush);
}
}
解决方案
好的,你在正确的道路上。您缺少的是无效调用,这将导致操作系统调用视图的 OnDraw。
每次要更新视图时调用 invalidate。但请注意,您的类只有一个路径对象,因此只会绘制最后一段。
如果我没记错的话,你应该持有一个ArrayList
对象Path
。在onDraw
你应该循环它们并一个接一个地绘制它们。
推荐阅读
- sql - 选择最新日期以上的所有值
- django - python manage.py runserver 显示了我开发的一个旧的 webapp 页面
- indexing - 如何动态汇总Excel中的列?
- google-apps-script - 从 Google 表单提取到 Google 表格时的 RESOURCE_EXHAUSTED
- arangodb - Arangodb 未启动 - {config} 指定的语言“en_US”与以前使用的语言不匹配
- java - 启动期间出现异常:java.lang.NoClassDefFoundError: it.geosolutions.imageio.utilities.ImageIOUtilities
- thingsboard - 有没有办法阻止trendz 不断地在thingsboard 中重新加载他们的图表?
- javascript - ChartJS - 移动垂直线显示在工具提示顶部
- reactjs - 在登录页面上反应路由
- elasticsearch - 在 must_not 中使用通配符不起作用