2

私は自分の 1 つをViewGroup移動できるようにしたいです。たとえば、それをクリックすると、その下のコンテンツが表示されます。2 回目のクリックで、再び閉じます。sliding menu振る舞いの種類。

ここに私のクラスがあります:

カスタムスクローラー:

public class MyScroller implements Runnable {
    private static final String TAG = "MY_SCROLLER";
    private static final int ANIMATION_DURATION = 500;
    private final Scroller mScroller;
    private View mScrollingView;

    private int lastX = 0;
    private static final Interpolator sInterpolator = new Interpolator() {
        public float getInterpolation(float t) {
            t -= 1.0f;
            return t * t * t * t * t + 1.0f;
        }
    };

    MyScroller(final View view) {
        mScroller = new android.widget.Scroller(view.getContext(), sInterpolator);
        mScrollingView = view;
    }

    public void start(int initialVelocity) {
        Log.d(TAG, "start() called");
        int initialX = mScrollingView.getScrollX();
        int maxX = mScrollingView.getWidth();
        mScroller.startScroll(0, 0, maxX, 0, ANIMATION_DURATION);
        lastX = initialX;
        mScrollingView.post(this);
    }

    public void run() {
        Log.d(TAG, "run() called");
        if (mScroller.isFinished()) {
            mScrollingView.invalidate();
            return;
        }

        boolean more = mScroller.computeScrollOffset();
        int x = mScroller.getCurrX();
        int diff = x - lastX;
        if (diff != 0) {
            Log.d(TAG, "x = " + x);
            mScrollingView.offsetLeftAndRight(diff);
            mScrollingView.invalidate();
            lastX = x;
        } else {
            forceFinished();
        }

        if (more) {
            mScrollingView.postDelayed(this, 16);
        }
    }

    void forceFinished() {
        if (!mScroller.isFinished()) {
            mScroller.forceFinished(true);
            mScrollingView.invalidate();
        }
    }
}

と使用法:

    viewGroup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new MyScroller(v).start(0);
        }
    });
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new MyScroller(v).start(0);
        }
    });

すべてが正常に機能するためButton、スムーズに動きます。しかしViewGroup、スクリーンショットのように痕跡を残そうとしました。内側に Button がある RelativeLayout はトレイルを残しました。Standalone Button は完璧に動きました。ここで何が欠けていますか?

ここに画像の説明を入力

4

0 に答える 0