2012-07-04 4 views
4

방법이라고 두 번 때 호출 될'의 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); 
    } 
} 

이다 onDraw()에서보기를 이동하려는하지만 난 방법 'move()'을 호출 할 때 onDraw가 두 번 호출됩니다. 나는 왜 그런지 모르겠다. 누가 도와 줄 수 있니?

+0

invalidate()를 호출하지 않으면 onDraw()가 호출되는지 여부가 결정됩니다. – yushulx

답변

-1

super.onDraw()를 호출 할 필요가 없다고 생각합니다.

0

UI 스레드 이외의 스레드에서 move() 메서드를 호출 할 가능성이 있습니까? 그렇다면 postInvalidate()를 사용하여 시작하여 동일한 문제가 발생하는지 확인하십시오.