Anda perlu subkelas ViewPager
. onTouchEvent
memiliki banyak hal baik di dalamnya yang tidak ingin Anda ubah seperti membiarkan pandangan anak untuk disentuh. onInterceptTouchEvent
adalah apa yang ingin Anda ubah. Jika Anda melihat kode untuk ViewPager
, Anda akan melihat komentar:
/*
* This method JUST determines whether we want to intercept the motion.
* If we return true, onMotionEvent will be called and we do the actual
* scrolling there.
*/
Inilah solusi lengkapnya:
Pertama, tambahkan kelas ini ke src
folder Anda :
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.animation.DecelerateInterpolator;
import android.widget.Scroller;
import java.lang.reflect.Field;
public class NonSwipeableViewPager extends ViewPager {
public NonSwipeableViewPager(Context context) {
super(context);
setMyScroller();
}
public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
setMyScroller();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
//down one is added for smooth scrolling
private void setMyScroller() {
try {
Class<?> viewpager = ViewPager.class;
Field scroller = viewpager.getDeclaredField("mScroller");
scroller.setAccessible(true);
scroller.set(this, new MyScroller(getContext()));
} catch (Exception e) {
e.printStackTrace();
}
}
public class MyScroller extends Scroller {
public MyScroller(Context context) {
super(context, new DecelerateInterpolator());
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, 350 /*1 secs*/);
}
}
}
Selanjutnya, pastikan untuk menggunakan kelas ini daripada yang biasa ViewPager
, yang mungkin Anda tentukan sebagai android.support.v4.view.ViewPager
. Di file tata letak Anda, Anda ingin menentukannya dengan sesuatu seperti:
<com.yourcompany.NonSwipeableViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
Contoh khusus ini dalam a LinearLayout
dan dimaksudkan untuk mengambil seluruh layar, itulah sebabnya layout_weight
1 dan layout_height
0dp.
Dan setMyScroller();
metode untuk transisi yang mulus