我创建了一个自定义viewpager,我希望用户只能从屏幕的一部分滑动和更改页面。
每个页面的底部都有一个带有一些文字的线性布局,我只想从那里滑动,而不是从洞屏幕上滑动。
这可能吗?
这是我的自定义viewpager类:
public class MyViewPager extends ViewPager {
private boolean mSwipable = true;
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return mSwipable ? super.onInterceptTouchEvent(event) : false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return mSwipable ? super.onTouchEvent(event) : false;
}
public boolean isSwipable() {
return mSwipable;
}
public void setSwipable(boolean swipable) {
mSwipable = swipable;
}
}
这是一个页面的视图:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:clipChildren="false"
android:clipToPadding="false"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/fragment_search">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottomLayout"
android:layout_marginBottom="@dimen/bottom_bar_height">
//show some stuff here
</LinearLayout>
<LinearLayout
android:id="@+id/bottomMenu"
android:layout_width="match_parent"
android:layout_height="@dimen/bottom_bar_height"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom"
android:orientation="horizontal">
// this is my footer, where i need to change the pages by swipe
</LinearLayout>
</RelativeLayout>
答案 0 :(得分:0)
请关注此问题,以便能够随意禁用滑动How do disable paging by swiping with finger in ViewPager but still be able to swipe programmatically?
并将其与SliderAdapter结合使用,以控制哪些页面可以刷卡。
如果您按照上面的链接,在ViewPager的子类上,您可以在onTouchEvent(MotionEvent event)
上添加一些GestureDetector并将其与您的活动一起提供,例如Android: How to handle right to left swipe gestures
通过执行此操作,您现在将拥有一些onSwipeRight并管理您的逻辑,如果页面应该被刷卡,或者下一步去哪里,请向适配器委派问题。