android – 如何在片段内实现水平滑动?

我有一个活动中的两个片段.我想在其中一个片段中实现滑动.我的布局是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:orientation="horizontal" >

    <fragment
        android:id="@+id/image_list_fragment"
        android:name="com.example.fragments.QGridFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="100" >
    </fragment>

    <fragment
        android:id="@+id/image_viewer_fragment"
        android:name="com.example.fragments.QViewerFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="85" />

</LinearLayout>

我想在image_viewer_fragment片段中实现滑动.我正在寻找使用ViewPager或GestureListener的方法.对于没有碎片的正常活动,我可以使用this方法.

最佳答案 我尝试在我的应用程序中实现滑动功能,为此我创建了一个实现OnTouchListener的类SwipeDetector.

以下是代码:

import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;

public class SwipeDetector implements OnTouchListener {

    public static enum Action {
        LR, // Left to Right
        RL, // Right to Left
        TB, // Top to bottom
        BT, // Bottom to Top
        None, // when no action was detected
        Click
    }

    private static final String logTag = "SwipeDetector";
    private static final int MIN_DISTANCE = 100;
    private float downX, downY, upX, upY;
    private Action mSwipeDetected = Action.None;

    public boolean swipeDetected() {
        return mSwipeDetected != Action.None;
    }

    public Action getAction() {
        return mSwipeDetected;
    }

    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN: {
            downX = event.getX();
            downY = event.getY();
            mSwipeDetected = Action.None;
            // Log.i(logTag, "Click On List" );
            return false; // allow other events like Click to be processed
        }
        case MotionEvent.ACTION_UP: {
            upX = event.getX();
            upY = event.getY();

            float deltaX = downX - upX;
            float deltaY = downY - upY;

            // horizontal swipe detection
            if (Math.abs(deltaX) > MIN_DISTANCE) {
                // left or right
                if (deltaX < 0) {

                    mSwipeDetected = Action.LR;
                    return false;
                }
                if (deltaX > 0) {

                    mSwipeDetected = Action.RL;
                    return false;
                }
            }
            /*
             * else
             * 
             * // vertical swipe detection if (Math.abs(deltaY) > MIN_DISTANCE)
             * { // top or down if (deltaY < 0) { Log.i(logTag,
             * "Swipe Top to Bottom"); mSwipeDetected = Action.TB; return false;
             * } if (deltaY > 0) { Log.i(logTag, "Swipe Bottom to Top");
             * mSwipeDetected = Action.BT; return false; } }
             */

            mSwipeDetected = Action.Click;
            return false;
        }
        }
        return false;
    }

}

在要在其中添加滑动操作的片段的onCreateView方法中,通过在setOnTouchListener视图中设置它来实现SwipeDetector.

像这样:

SwipeDetector swipeDetector = new SwipeDetector();
view.setOnTouchListener(swipeDetector);

if (swipeDetector.getAction() == Action.LR) {
   //Do some action
}
点赞