4

メソッド「onDraw()」は、「 」が呼び出されたときに 2 回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を呼び出すと、2 回呼び出されます。理由がわかりません、誰か助けてくれませんか?

4

2 に答える 2

0

UI スレッド以外のスレッドから move() メソッドが呼び出される可能性はありますか? もしそうなら、postInvalidate() を使用することから始めて、同じ問題が発生するかどうかを確認します...

于 2012-08-22T15:05:51.627 に答える
-1

super.onDraw(); を呼び出す必要はないと思います。

于 2012-07-04T04:19:35.813 に答える