我在 Android SDK 中摆弄 2D 图形,但在一个简单的示例中遇到了麻烦。
我假设我只是误解了一些基本的/基本的东西。
public class DrawView extends View {
Paint paint = new Paint();
Canvas canvas = new Canvas();
public DrawView(Context context) {
super(context);
paint.setColor(Color.BLACK);
}
@Override
public void onDraw(Canvas canvas) {
this.canvas = canvas;
this.canvas.drawLine(0,0, 500, 500, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d("DrawView", "onTouchEvent: " + event.getX() + "," + event.getY() );
canvas.drawLine(0,500, 500, 0, paint);
return true;
}
}
上面的代码从0,0
to 500,500
当应用程序启动时。这些部件工作得很好。
问题是第二条线没有在触摸事件上绘制。这onTouchEvent
肯定会被调用,因为我在日志中看到坐标调试消息。
有人能指出我做错了什么愚蠢的事情吗?
您应该在 onTouchEvent() 末尾调用 invalidate() 来告诉系统更新屏幕。调用invalidate()将会调用onDraw()。
另外,根本上错误的是您在这个类中创建了一个画布。这对你绝对没有任何作用。要绘制的画布是从 onDraw() 方法获取的画布。 onTouchevent 中对 canvas.drawLine() 的调用不会为您做任何事情,也不应该在那里。这是一张空画布,不是要“张贴”的画布。
在 onTouchEvent() 中,您应该只收集触摸事件数据,如果需要的话还可以对其进行一些处理。您不应该在那里调用任何绘图方法。然而,正如我所说,如果你想从 onTouchEvent() 触发绘制,你可以调用 invalidate()。如果您想根据触摸位置绘制线条,则需要创建 X 和 Y 坐标的类变量。您在 onTouchEvent() 中更新这些 X 和 Y 变量,然后在 onDraw() 中使用它们根据这些 X 和 y 变量绘制您需要的任何内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)