2012-03-27 2 views
0

Я изучаю Android и java, поэтому это, вероятно, простой вопрос.Redraw (invalidate) в меню нажмите

Я пытаюсь вызвать invalidate() на моем DrawView. Я прочитал об этом, и я думаю, что проблема в том, что я не могу назвать invalidate вне потока пользовательского интерфейса (или что-то еще). Насколько я знаю, у меня есть только один поток, так как это простая игра TicTacToe. так вот мой код.

DrawView dv; 

Создание объекта Dv, чтобы связать его с DrawView класса

dv.invalidate(); 

пытается вызвать метод Invalidate.

Это первая часть моего DrawView класса

class DrawView extends View implements OnTouchListener, OnGestureListener 
{ 
    public DrawView(Context context) 
    { 
     super(context); 
     this.setOnTouchListener(this); 

    } 

    @Override 
    protected void onDraw(Canvas canvas) 
    { 
        canvas.drawColor(0xFF303030); 
     Paint paint = new Paint(); 
     paint.setColor(0xFFFFFFFF); 
     board.draw(canvas); 
     detectEnd(); 
    } 

, кажется, как будто Invalidate называется, однако он выходит из строя программу. Есть идеи?

EDIT: Я попробовал dv.postInvalidate(), однако он выбрасывает исключение нулевого указателя. Я попытался инициализировать DrawView dv несколькими способами, но безрезультатно.

ответ

0

Если вы вызываете invalidate извне DrawView, вам нужно вместо этого вызвать postInvalidate().

Кроме того, обычно не рекомендуется воспроизводить звуки во время метода onDraw.

+0

lol Я знаю, но я просто играл с ним, чтобы наклоняться, как играть в звуки. Я вытащу его позже. – Bullyen

+0

Я пробовал postInvalidate, однако я получаю исключение нулевого указателя, которое отключает приложение. Должен ли я сделать что-то особенное для инициализации моего объекта DrawView? – Bullyen

+0

Да, извините, я пропустил это. Вы никогда не вызываете конструктор. Таким образом, это должно быть что-то вроде DrawView dv = new DrawView (getApplicationContext()); Если вы не вызываете конструктор, dv инициализируется нулем. Кроме того, убедитесь, что у вас есть инициализированная плата. – lrAndroid