2012-07-04 103 views
4

方法「的onDraw()」將「invalidate」被調用時被調用兩次。 我想移動視圖起來onDraw(),這裏是我的代碼方法「的onDraw()」將被調用時兩次「無效」被稱爲

package com.blsm.sss.view; 

public class MoveRelativeLayout extends RelativeLayout { 

    private int mDelta = 0; 

    public MoveRelativeLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public MoveRelativeLayout(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public void move(int delta) { 

     mDelta = delta;  
     invalidate();  
     Logger.d("MoveRelativeLayout", "move() delta:" + mDelta); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
      Logger.d("MoveRelativeLayout", "onDraw() delta:" + mDelta); 
      super.onDraw(canvas); 
      canvas.translate(0, mDelta); 
    } 
} 

但是,當我調用的方法「move()onDraw會被調用兩次。我不知道爲什麼,有人能幫助我嗎?

+0

如果你不調用invalidate(),是否會調用onDraw()? – yushulx

回答

-1

我不認爲你需要調用super.onDraw();

0

move()方法可能會從UI線程以外的線程調用嗎?如果是這樣,我會開始使用postInvalidate(),看看你是否得到同樣的問題...