2016-09-11 50 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

尝试在onCreate方法newDrawing();newDrawing(); --> //newDrawing();)在MyActivity发表评论。这似乎是第一次由系统自动调用onDraw

+0

它不起作用。该对象绘制不正确,因为'a'和'b'尚未设置。 –

+0

你可以检查参数'a'和'b'是否已经在'onDraw'方法中设置(例如使用一些'boolean'),所以只有当'a','b'是众所周知。 – user35603

+0

但是用这种方式,直到用户按下按钮并调用'newDrawing()'时才会绘制该对象。 –