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 に答える