आपको उपवर्ग करने की आवश्यकता है ViewPager
। onTouchEvent
इसमें बहुत सारी अच्छी चीजें हैं जिन्हें आप बदलना नहीं चाहते हैं जैसे कि बच्चे के विचारों को छूने की अनुमति देना। onInterceptTouchEvent
वह है जो आप बदलना चाहते हैं। यदि आप कोड को ViewPager
देखते हैं, तो आप टिप्पणी देखेंगे:
/*
* 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.
*/
यहाँ एक पूर्ण समाधान है:
सबसे पहले, इस वर्ग को अपने src
फ़ोल्डर में जोड़ें :
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*/);
}
}
}
इसके बाद, नियमित के बजाय इस वर्ग का उपयोग करना सुनिश्चित करें ViewPager
, जिसे आपने संभवतः निर्दिष्ट किया है android.support.v4.view.ViewPager
। अपनी लेआउट फ़ाइल में, आप इसे कुछ इस तरह निर्दिष्ट करना चाहेंगे:
<com.yourcompany.NonSwipeableViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
यह विशेष उदाहरण एक है LinearLayout
और पूरे स्क्रीन को उठाने के लिए है, यही कारण layout_weight
है कि 1 है और layout_height
0dp है।
और setMyScroller();
विधि चिकनी संक्रमण के लिए है