0

我有一个自定义视图,它接受触摸事件。因此,我不能使用滚动视图。由于页面很小,我想使用自定义滚动条按钮滚动视图。

我可以滚动视图。但问题是我不知道如何检测用户是向上还是向下移动手指。现在我正在使用 onTouchListner 向下滚动视图。

如何检测用户手指指向哪个方向?这是我的代码:

@Override
    public boolean onTouch(View v, MotionEvent event) {

     if (v == mScrollBtn) {
            int scrollBarHeight = mScrollBar.getHeight();;

            LayoutParams params = (LayoutParams) mScrollBtn.getLayoutParams();
            params.topMargin = SCROLL_FACTOR*mTopMargin;
            mTopMargin = mTopMargin + 1;
            if (params.topMargin <= mScrollBar.getHeight()-mBottomPadding) {
                mScrollBtn.setLayoutParams(params);
                // scrollDown(View.FOCUS_DOWN);
                mCustomView.scrollTo(0, mScrollBtn.getHeight() +SCROLL_FACTOR* mTopMargin);


}

其中 SCROLL_FACTOR=2 & mTopMargin=2。

提前致谢

4

1 回答 1

1

您可以通过简单地监视 onMove 值来计算方向。

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        startX = event.getRawX();
        startY = event.getRawY();
        break;

    case MotionEvent.ACTION_MOVE:
        float newX = event.getRawX();
        float newY = event.getRawY();

        if (Math.abs(newX - startX) > Math.abs(newY - startY)) {
            // Means Horizontal Movement.
            if (newX - startX > 0) {
                // Moving Right
            } else {
                // Moving Left
            }
        } else {
            // Means Vertical Movement.
            if (newY - startY > 0) {
                // Moving Down
            } else {
                // Moving Up
            }
        }

        startX = newX;
        startY = newY;
        break;

    case MotionEvent.ACTION_UP:
        // Finger Up and the motion is complete
        startX = 0;
        startY = 0;
        break;
    }
    return super.onTouchEvent(event);
}
于 2014-11-17T11:08:31.713 回答