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();
}
它不起作用。该对象绘制不正确,因为'a'和'b'尚未设置。 –
你可以检查参数'a'和'b'是否已经在'onDraw'方法中设置(例如使用一些'boolean'),所以只有当'a','b'是众所周知。 – user35603
但是用这种方式,直到用户按下按钮并调用'newDrawing()'时才会绘制该对象。 –