2016-09-11 3 views
0

Я не могу понять, почему в первый раз, когда я вызываю this.invalidate в пользовательском представлении, метод onDraw() вызывается дважды (выполнение двойных операций на одном и том же переменные). После этого каждый раз, когда пользователь нажимает кнопку, onDraw() вызывается один раз, как и должно быть. Вот код:'onDraw()' вызывается дважды, когда вызываемый 'invalidate' вызывается в первый раз

MyActivity

MyView mCustomView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_interval_identification); 

    mCustomView = (MyView) findViewById(R.id.my_view); 
    Button mButton = (Button) findViewById(R.id.id_btn); 

    mButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      newDrawing(); 
     } 
    }); 

    newDrawing(); 

} 

private void newDrawing() { 

    int a; 
    int b; 

    //some operations on 'a' and 'b' 

    mCustomView.newDrawing(a, b); 

} 

MyView

int x; 
int y; 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    Drawable object = ContextCompat.getDrawable(getContext(), R.drawable.object); 

    //some operations 

    object.draw(canvas); //based on 'x' and 'y' 
} 

public void newDrawing(int a, int b) { 
    x = a; 
    y = b; 
    this.invalidate(); 
} 

ответ

0

Try комментировать newDrawing(); (newDrawing(); --> //newDrawing();) в методе onCreate в MyActivity. Кажется, что первый раз onDraw вызывается системой автоматически.

+0

Это не работает. Объект не рисуется правильно, потому что 'a' и 'b' не были установлены. –

+0

Вы можете проверить, были ли параметры 'a' и' b' установлены уже в методе onDraw (например, с использованием некоторого 'boolean'), поэтому он должен рисовать объект только тогда, когда' a', 'b' известен. – user35603

+0

Но таким образом объект не будет нарисован до тех пор, пока пользователь не нажмет кнопку и не вызывается 'newDrawing()'. –

Смежные вопросы