向右或向左滑动

时间:2015-07-04 10:42:14

标签: android android-fragments ontouchlistener swipe-gesture

我尝试了很多不同的方法来实现向左滑动和向右滑动,但它们都不适用于我。 我想通过滑动来改变两个片段。我试过从这里和其他来源复制的onFling和onTouch方法但是应用程序没有响应触摸或它崩溃。我在MainActivity中编写了必须包含这些片段的实现代码,但是当我在片段上设置onTouch Listeners时它给了我NullPointerException,但是我不知道是否可以将OnTouchListener添加到MainActivity本身? 无论如何,这是我上次写的代码,它给了我一个错误:

尝试在空对象引用上写入'android.app.FragmentManagerImpl android.app.Fragment.mFragmentManager'字段

import java.util.Scanner;
import java.io.FileNotFoundException;

public class test1 {

    private static final int FORWARD = 1;
    private static final int BACKWARDS = -1;
    private static Scanner scn = new Scanner(System.in);

    public static void main(String args[]) throws FileNotFoundException {

        int N = scn.nextInt();
        int k = scn.nextInt();
        int m = scn.nextInt();
        while (N != 0) {
            boolean[] offQueue = new boolean[N];
            int offCount = 0;
            int kdx = 0;
            int mdx = N - 1;
            kdx = hello(k, offQueue, kdx, FORWARD);
            System.out.println(kdx);
        }
    }

    private static int hello(int q, boolean[] offQueue, int qdx, int direction) {
        return qdx;//Problem is here
    }
}

2 个答案:

答案 0 :(得分:2)

尝试处理 MotionEvent.ACTION_MOVE 而不是 ACTION_UP

让我们将滑动动作定义为“当用户触摸并移动手指超过某个阈值距离时”。 所以你的处理程序看起来像:

boolean mSwipePending = false; // let's introduce this flag field 

...

// inside touch listener
case MotionEvent.ACTION_DOWN: 
    x1 = event.getX();
    y1 = event.getY();
    mSwipePending = true;
    break;

case MotionEvent.ACTION_UP: 
    mSwipePending = false; // do not care about swipe, if up
    break;

case MotionEvent.ACTION_MOVE:
    if (mSwipePending) {
        if (event.getX() > x1 + threshold) {
            doSomethighWhenSwipeRight();
            mSwipePending = false; // stop next move handling
        } else if (event.get(X) < x1 - threshold) {
            doSomethighWhenSwipeLeft();
            mSwipePending = false; // stop next move handling
        }
    }

您可以将阈值定义为某个预定义值(例如100),但最好通过屏幕密度计算它。

答案 1 :(得分:1)

由于您要刷两个片段,为什么不尝试使用 ViewPager FragmentPagerAdapter

在这里,本教程将指导您如何将片段添加到ViewPager以实现左右滑动效果。

http://www.truiton.com/2013/05/android-fragmentpageradapter-example/

希望它有所帮助。