4

ビュー フリッパーには 4 つのリスト ビューがあります。ビュー フリッパーに実装されているジェスチャ リスナーを使用してビュー フリッパーを反転すると、正常に動作します。しかし、タッチ イベントがビュー フリッパーからリスト ビューにトリクルダウンできないため、リスト ビューをスクロールできません。解決策を提供してください。

private class MyViewFlipper extends ViewFlipper implements OnGestureListener {
    GestureDetector gestureScanner = new GestureDetector(this);
    Context context;

    public MyViewFlipper(Context context) {
        super(context);
        this.context=context;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) { 
        return gestureScanner.onTouchEvent(event);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {  
        return gestureScanner.onTouchEvent(event);
    }

    @Override
    public boolean onDown(MotionEvent arg0) {
        return true;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        try {
            if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) return false;

            // right to left swipe
            if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE &&
                Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                this.setOutAnimation(AnimationUtils.loadAnimation(context,R.anim.push_left_out));
                this.setInAnimation(AnimationUtils.loadAnimation(context,R.anim.push_left_in));
                this.showNext();
                return true;
            } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE &&
                       Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                this.setOutAnimation(AnimationUtils.loadAnimation(context,R.anim.push_right_out));
                this.setInAnimation(AnimationUtils.loadAnimation(context,R.anim.push_right_in));
                this.showPrevious();
                return true;
            } else if (e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE &&
                       Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
                return true;
            } else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE &&
                       Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
                return true;
            }
       } catch (Exception e) {
            e.printStackTrace();
            //Toast.makeText(context, "Error Occurred", Toast.LENGTH_LONG);
       }
       return false;
    }

    @Override
    public void onLongPress(MotionEvent e) {

    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        //I want this event to be handled by list view
        this.getCurrentView().findViewWithTag("hierarchy_list").dispatchTouchEvent(e1);

        Log.i(LOG_TAG, "Scroll");
        return false;
    }

    @Override
    public void onShowPress(MotionEvent e) {

    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        //DO something  
        return false;
    }
}
4

2 に答える 2

1
@Override
public boolean onInterceptTouchEvent(MotionEvent event) { 
    gestureScanner.onTouchEvent(event);
    return false;
}

@Override
public boolean onTouchEvent(MotionEvent event) {  
    gestureScanner.onTouchEvent(event);
    return false; 
}

うまくいけば、イベントは受け継がれます。

于 2010-11-19T23:24:35.340 に答える
1

最終的に、私はこれを行い、イベントを少しずつ落としました。

        @Override
    public boolean onInterceptTouchEvent(MotionEvent event) { 
        return gestureScanner.onTouchEvent(event);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {  
//
        this.dispatchTouchEvent(event);
        return gestureScanner.onTouchEvent(event);
    }
于 2010-11-21T10:29:19.593 に答える