我正在编写我的第一个Android应用程序。所以我还处于学习阶段。
非常简单,我在屏幕中央的onDraw()中绘制图形,并且onTouch事件必须将图形移动到用户触摸的位置。为此,onTouch事件将启动一个线程并更新图形。问题是canvas.draw()在从onDraw()调用时工作,但在从线程内调用时不更新画布/屏幕。
我的函数drawSplash(Canvas c,Location l);
我在onDraw()和线程中调用相同的函数。
我能看到的代码的唯一区别是我在我的类中的变量中存储了onDraw()函数中传入给我的Canvas对象,以便我可以再次在线程中使用它。这有点不对劲。如果是这样,这样做的正确方法是什么?我可以随时获取Canvas对象吗?我该怎么做?
答案 0 :(得分:1)
您必须使用onDraw方法覆盖.invalidate()您的视图。每次调用它时都应该在正确的位置绘制图形。
你应该在主线程中调用.invalidate()方法。
答案 1 :(得分:1)
这是一种略有不同的方法。
制作一些像这样的全球字段:
private int mX;
private int mY;
然后,在您的onTouch()
方法中(使用相同onTouch
类的View
,对吗?),您可以更改这些字段,然后调用invalidate()
方法:
public boolean onTouch (View v, MotionEvent event) {
mX = event.getX();
mY = event.getY();
invalidate();
}
现在,onDraw()
方法只会将你的飞溅画到位置(mX,mY)。
答案 2 :(得分:0)
根据我的理解,您可以将基板设置为背景图像。
如果你这样做,你不必经常重绘它,但我不是百分之百确定。
在这里查看Android Dev视图上的Lunar Lander代码:
http://developer.android.com/resources/samples/LunarLander/index.html
菲尔