当调用“invalidate”时,“onDraw()”方法将被调用两次。

4

当调用 '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 将被调用两次。我不知道为什么,请问是否有人可以帮助我?

如果您不调用invalidate(),onDraw()方法是否会被调用? - yushulx
2个回答

0

移动(move())方法是否可能会从除UI线程之外的线程调用?如果是这样,我建议先使用postInvalidate()方法,看看是否仍然存在同样的问题...


-1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接