4

调用“ ”时,方法“ onDraw() ”将被调用两次invalidate。我想将视图向上移动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将被调用两次。我不知道为什么,有人可以帮助我吗?

4

2 回答 2

0

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

于 2012-08-22T15:05:51.627 回答
-1

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

于 2012-07-04T04:19:35.813 回答