2

我希望我的一个ViewGroup是可移动的。比方说,我想点击它,它下面的内容就会显示出来。在第二次单击时,它再次关闭。种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 留下了痕迹。独立按钮完美移动。我在这里想念什么?

在此处输入图像描述

4

0 回答 0