用手势改变片段

时间:2017-12-01 19:20:52

标签: android android-gesture

我尝试使用手势来更改MainActivity中的片段。

我使用此代码。

主要活动:

public class MainActivity extends FragmentActivity {

/* ... */

HomeGestureDetector homeGestureDetector = new HomeGestureDetector(MainActivity.this){
        public void onSwipeRight() {
            menuListener((selectedItem-1 == -1)? 4 : selectedItem-1) ;
        }
        public void onSwipeLeft() {
            menuListener((selectedItem + 1) % 5);
        }
    };
    center.setOnTouchListener(new GestureManager(new GestureDetector(MainActivity.this, homeGestureDetector)));
}

GestureManager:

public class GestureManager implements OnTouchListener {

private final GestureDetector gestureDetector;

public GestureManager(GestureDetector gd) {
    gestureDetector = gd;
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    return gestureDetector.onTouchEvent(event);
}

最后,HomeGestureDetector是扩展SimpleOnGestureListener的类,但是你可以看到方法onSwipeRight()onSwipeLeft()的实现是MainActivity中的委托。

最初这段代码工作正常,但是当我用其他元素填充布局时,似乎无法拦截手势,因为侦听器在容器布局上,当我点击时,我触摸了相关元素,而不是容器。

如何实现此功能?

1 个答案:

答案 0 :(得分:1)

考虑使用ViewPager修改您的实施。

ViewPager是......

  

布局管理器,允许用户左右翻转   数据页面。您提供PagerAdapter的实现   生成视图显示的页面。

(来自docs

有趣/需要阅读(我发布了代码,但developer.android.com在此处需要一切):

https://developer.android.com/training/implementing-navigation/lateral.html#horizontal-paging

  • 此文档将帮助您将ViewPager设置为代码库

https://developer.android.com/training/implementing-navigation/lateral.html#swipe-tabs

  • 此部分将帮助您更改MainActivity#menuListener方法

https://developer.android.com/design/patterns/swipe-views.html

  • 这将有助于了解有效使用用户习惯的ViewPager
  • 的Android指南

HTH!