Android图形绘制在画布问题上

时间:2011-03-28 14:44:58

标签: android graphics

我正在编写我的第一个Android应用程序。所以我还处于学习阶段。

非常简单,我在屏幕中央的onDraw()中绘制图形,并且onTouch事件必须将图形移动到用户触摸的位置。为此,onTouch事件将启动一个线程并更新图形。问题是canvas.draw()在从onDraw()调用时工作,但在从线程内调用时不更新画布/屏幕。

我的函数drawSplash(Canvas c,Location l);

我在onDraw()和线程中调用相同的函数。

我能看到的代码的唯一区别是我在我的类中的变量中存储了onDraw()函数中传入给我的Canvas对象,以便我可以再次在线程中使用它。这有点不对劲。如果是这样,这样做的正确方法是什么?我可以随时获取Canvas对象吗?我该怎么做?

  • P

3 个答案:

答案 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

菲尔