Я не могу понять, почему в первый раз, когда я вызываю 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();
}
Это не работает. Объект не рисуется правильно, потому что 'a' и 'b' не были установлены. –
Вы можете проверить, были ли параметры 'a' и' b' установлены уже в методе onDraw (например, с использованием некоторого 'boolean'), поэтому он должен рисовать объект только тогда, когда' a', 'b' известен. – user35603
Но таким образом объект не будет нарисован до тех пор, пока пользователь не нажмет кнопку и не вызывается 'newDrawing()'. –