当调用'invalidate'时,方法'onDraw()'将被调用两次

时间:2012-07-04 04:04:52

标签: android ondraw invalidation

调用“ 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会被调用两次。我不知道为什么,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

是否可能从UI线程以外的线程调用move()方法?如果是这样,我将首先使用postInvalidate(),看看你是否遇到同样的问题......

答案 1 :(得分:-1)

我认为你不需要调用super.onDraw();