使用OnGestureListener或OnGesturePerformedListener在XML布局之间滑动

时间:2012-12-28 17:43:49

标签: android android-layout swipe gesture-recognition

我正在尝试在我的应用程序的页面之间实现滑动。我目前有5个XML布局文件,我可以从一个Activity访问所有文件。底部有五个按钮代表每个布局,按下时会切换到相应的XML布局。

我尝试使用OnGestureListener实现滑动,但它不能按照我的意愿运行。我需要滑动视图的Title以便滑动才能工作。当我滑过布局中显示的任何视图时,它不起作用。

我开始寻找并找到GestureOverlayView,这似乎是我想要的。但是,我发现的所有实现都给我带来了问题。 TutorialSimilar SO question

这是我到目前为止的代码:

public class Monitor extends Activity implements android.view.GestureDetector.OnGestureListener, OnGesturePerformedListener {
    private GestureDetector gestureScanner;
    private GestureOverlayView gestures;
    private static final int SWIPE_MIN_DISTANCE = 50;
    private static final int SWIPE_THRESHOLD_VELOCITY = 50;
    private GestureLibrary gestureLib;

    public void onCreate( Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );
        gestures = new GestureOverlayView(this);
        View inflate = getLayoutInflater().inflate(R.layout.main, null);
        gestures.addView(inflate);
        gestures.addOnGesturePerformedListener(this);
        gestureLib = GestureLibraries.fromRawResource(this, R.raw.gestures); // Error here
        if (!gestureLib.load()) {
           finish();
         }
        setContentView(gestures);
}

我在第gestureLib = GestureLibraries.fromRawResource();行上收到错误消息。错误是raw cannot be resolved or is not a field.。我的raw目录中没有/project-name/res/个文件夹。有任何想法吗?还有另一种方法吗?

这是我第一次实现滑动功能的方式,只能在标题栏中使用。

public class Monitor extends Activity implements android.view.GestureDetector.OnGestureListener {
    private GestureDetector gestureScanner;
    private static final int SWIPE_MIN_DISTANCE = 50;
    private static final int SWIPE_THRESHOLD_VELOCITY = 50;
    public void onCreate( Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );
        gestureScanner = new GestureDetector(this);
        setContentView( R.layout.monitor );
    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.i( "TouchEvent", "Here" );
        return gestureScanner.onTouchEvent(event);
    }

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
        if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
            && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY
            ) {
            Log.i( "OnFling", "Right" );
            //ur code goes here.            
            if( getTitle().equals( getString( R.string.main_analogs ) ) ) {
                setContentView( R.layout.monitor );
                setTitle( R.string.main_monitor );
                buildButtons();
                if( hasRead ) {
                    updateMonitorForm();
                }
            }
        }
        /* on scroll to the previous page  */
        else if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
            && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY
            ) {
            Log.i( "OnFling", "Left" );
            //Ur code goes here
            if( getTitle().equals( getString( R.string.main_monitor ) ) ) {
                setContentView( R.layout.analogs );
                setTitle( R.string.main_analogs );
            buildButtons();
                if( hasRead ) {
                    updateMonitorForm();
                }
            }
        }
        return false;
}

1 个答案:

答案 0 :(得分:2)

  

我正在尝试在我的应用程序的页面之间实现滑动。一世   目前有5个XML布局文件,我从一个访问所有文件   活动。底部有五个按钮代表每个按钮   布局和按下时切换到相应的XML布局。

这将是ViewPager小部件的理想方案(除非您忘记添加其他重要细节)。您可以手动滑动ViewPager(这样您就不需要自己处理触摸事件了),也可以使用ViewPager方法设置setCurrentItem的当前页面( Buttons部分。

我根据你的情况制作了我的小例子。该样本非常自我解释,您可以找到它here