सीमा से बाहर स्वाइप करने का प्रयास कर रहा है, मैं कुछ डेटा प्रदर्शित करने के लिए 6 पेजों वाले व्यूपेजर का उपयोग कर रहा हूं। मैं एक विधि को कॉल करने में सक्षम होना चाहता हूं जब उपयोगकर्ता 0 स्थिति पर होता है और दाएं (पीछे की तरफ) या स्थिति 5 पर स्वाइप करने की कोशिश करता है और बाएं (आगे) पर स्वाइप करने का प्रयास करता है, भले ही इनके लिए कोई और पृष्ठ मौजूद न हो दिशाओं। क्या इन परिदृश्यों के लिए मैं कोई तरीका सुन सकता हूं?व्यूपार्जर पता लगाता है कि उपयोगकर्ता
उत्तर
ViewPager बढ़ाएँ और onInterceptTouchEvent()
इस तरह ओवरराइड:
public class CustomViewPager extends ViewPager {
float mStartDragX;
OnSwipeOutListener mListener;
public void setOnSwipeOutListener(OnSwipeOutListener listener) {
mListener = listener;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
float x = ev.getX();
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mStartDragX = x;
break;
case MotionEvent.ACTION_MOVE:
if (mStartDragX < x && getCurrentItem() == 0) {
mListener.onSwipeOutAtStart();
} else if (mStartDragX > x && getCurrentItem() == getAdapter().getCount() - 1) {
mListener.onSwipeOutAtEnd();
}
break;
}
return super.onInterceptTouchEvent(ev);
}
public interface OnSwipeOutListener {
public void onSwipeOutAtStart();
public void onSwipeOutAtEnd();
}
}
मैंने कस्टमव्यूपेजर नामक एक क्लास बनाई है और उपर्युक्त विधि लागू की है। अगर किसी कथन की शर्तों को पूरा किया जाता है तो मैं अपनी गतिविधि के साथ कैसे संवाद कर सकता हूं? क्या ViewPager ऑब्जेक्ट का उपयोग करके मेरी गतिविधि में श्रोता या कुछ स्थापित करने का कोई तरीका है? – Nicklas
मैंने अपना जवाब अपडेट किया। आपको बस अपनी गतिविधि में 'setOnSwipeOutListener()' को कॉल करने की आवश्यकता है। मैंने यह कोड नहीं चलाया, इसलिए इसे कुछ समायोजन करने की आवश्यकता हो सकती है। –
बहुत बहुत धन्यवाद। – Nicklas
कैसे अपने ViewPager पर एक OnPageChangeListener स्थापना के बारे में? फिर आप अपने नेविगेशन तीर या ऑन पेज पर स्क्रॉल किए गए संशोधित कर सकते हैं।
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
updateNavigationArrows();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
कहा जाता है विधि 'setOnPageChangeListener() 'को नए एसडीके में बहिष्कृत किया गया है और इसे' addOnPageChangeListener() 'के साथ बदल दिया गया है। – Leukipp
फ्लैवियो फरिया का उत्तर मेरे लिए काम नहीं करता है। IterceptTouchEvent() पर मिलने वाली एकमात्र घटना ACTION_DOWN घटना है। तो मैं इसे काम करने के लिए onTouchEvent() विधि को ओवरराइड करता हूं।
यहां कोड है। ध्यान दें कि मेरे पास श्रोता में केवल SwipeOutAtEnd() है। आप पहले कोड पर बाएं स्वाइपिंग का समर्थन करने के लिए अपना कोड जोड़ सकते हैं।
public class CustomViewPager extends ViewPager {
float mStartDragX;
OnSwipeOutListener mListener;
public void setOnSwipeOutListener(OnSwipeOutListener listener) {
mListener = listener;
}
@Override
public boolean onTouchEvent(MotionEvent ev){
if(getCurrentItem()==getAdapter().getCount()-1){
final int action = ev.getAction();
float x = ev.getX();
switch(action & MotionEventCompat.ACTION_MASK){
case MotionEvent.ACTION_DOWN:
mStartDragX = x;
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
if (x<mStartDragX){
mListener.onSwipeOutAtEnd();
}else{
mStartDragX = 0;
}
break;
}
}else{
mStartDragX=0;
}
return super.onTouchEvent(ev);
}
public interface OnSwipeOutListener {
public void onSwipeOutAtEnd();
}
धन्यवाद आप यह भी मेरे लिए काम किया है! –
यदि आप उस विधि से 'सत्य' वापस करते हैं तो आपको'InterterTouchEvent() 'में केवल 'ACTION_DOWN' प्राप्त होगा। –
हाय सब, मैंने कोड का उपयोग किया है, लेकिन अगर मैं विधि को कॉल करता हूं तो भी मेरी गतिविधि में ऑनस्वाइपऑललिस्टर विधि नहीं कहा जाता है। कृपया मेरा प्रश्न पोस्ट करें http://stackoverflow.com/questions/25889115/android-viewpager-detect-swipe-beyond-the-bounds –
मुझे आश्चर्य है कि यह दूसरों के लिए कैसे काम करता है, यह मेरे लिए काम नहीं कर रहा है।
onInterceptTouchEvent()
केवल ACTION_DOWN
ईवेंट लेता है। जबकि onTouchEvent()
केवल एक समय में ACTION_DOWN
, ACTION_UP
और अन्य में एक ईवेंट लेता है।
मुझे इसे ठीक से काम करने के लिए onInterceptTouchEvent()
और onTouchEvent()
दोनों को ओवरराइड करना पड़ा। ACTION_DOWN
onInterceptTouchEvent
प्रारंभिक X
स्पर्श बिंदु, और OnTouchEvent
अंतिम X2
बिंदु पकड़ लेता है। स्वाइप दिशा का पता लगाने के लिए मैंने इसकी तुलना की।
स्पर्श की प्रारंभिक एक्स मूल्य प्राप्त करें:
float x1 = 0;
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch(ev.getAction() & MotionEventCompat.ACTION_MASK){
case MotionEvent.ACTION_DOWN:
x1 = ev.getX();
break;
}
return super.onInterceptTouchEvent(ev);
}
tjlian616 के कोड से, onTouchEvent()
ACTION_UP
को सुनता है और यह पिछले X
मूल्य है हो जाता है। जबकि मैंने प्रारंभिक श्रोता पर स्वाइप करने के लिए अपना वर्तमान आइटम का मान 0 होना निर्धारित किया है। इसकी तुलना की और श्रोता को निकाल दिया।
@Override
public boolean onTouchEvent(MotionEvent ev){
if(getCurrentItem()==0){
final int action = ev.getAction();
switch(action & MotionEventCompat.ACTION_MASK){
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
mStartDragX = ev.getX();
if (x1<mStartDragX){
Log.i("TOUCH: ", "ACTION UP " + x1 + " : " + mStartDragX);
mListener.onSwipeOutAtStart();
}else{
Log.i("TOUCH ELSE : ", "ACTION UP " + x1 + " : " + mStartDragX);
mStartDragX = 0;
}
break;
}
}else{
mStartDragX=0;
}
return super.onTouchEvent(ev);
}
धन्यवाद @Flavio के लिए बहुत कुछ है, हालांकि मैं क्योंकि कॉलबैक तरीकों दो बार फायरिंग कर रहे थे उसकी कोड के लिए कुछ परिवर्तन करना ही था, यह भी मैं कोड की जाँच करने के लिए जोड़ा अगर कोई पंजीकृत श्रोता था, दुर्घटनाग्रस्त एप्लिकेशन से बचने के लिए जब पंजीकृत कोई श्रोता नहीं है।
public class CustomViewPager extends android.support.v4.view.ViewPager {
float mStartDragX;
OnSwipeOutListener mOnSwipeOutListener;
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setOnSwipeOutListener(OnSwipeOutListener listener) {
mOnSwipeOutListener = listener;
}
private void onSwipeOutAtStart() {
if (mOnSwipeOutListener!=null) {
mOnSwipeOutListener.onSwipeOutAtStart();
}
}
private void onSwipeOutAtEnd() {
if (mOnSwipeOutListener!=null) {
mOnSwipeOutListener.onSwipeOutAtEnd();
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch(ev.getAction() & MotionEventCompat.ACTION_MASK){
case MotionEvent.ACTION_DOWN:
mStartDragX = ev.getX();
break;
}
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev){
if(getCurrentItem()==0 || getCurrentItem()==getAdapter().getCount()-1){
final int action = ev.getAction();
float x = ev.getX();
switch(action & MotionEventCompat.ACTION_MASK){
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
if (getCurrentItem()==0 && x>mStartDragX) {
onSwipeOutAtStart();
}
if (getCurrentItem()==getAdapter().getCount()-1 && x<mStartDragX){
onSwipeOutAtEnd();
}
break;
}
}else{
mStartDragX=0;
}
return super.onTouchEvent(ev);
}
public interface OnSwipeOutListener {
void onSwipeOutAtStart();
void onSwipeOutAtEnd();
}
}
एक इलाज करता है (प्रत्येक स्वाइप के लिए केवल एक कॉलबैक के साथ!)। बीटीडब्लू, आप अपनी गतिविधि को 'कस्टमव्यूपेजर लागू कर सकते हैं। ओनस्वाइपऑट लिस्टनर' और अपनी गतिविधि में भी, अपने कस्टम व्यूपेजर ऑब्जेक्ट पर 'myCustomViewPager.setOnSwipeOutListener (this);' को कॉल करना न भूलें। –
@spacebiker यह मेरे लिए काम किया :) – NarendraJi
@DroidWormNarendra, जानना अच्छा है;) – spacebiker
- 1. पीईसाइड/पीईक्यूटी पता लगाता है कि क्या उपयोगकर्ता विंडो
- 2. Vbscript पता लगाता है कि क्या यूएसी-एलिवेटेड
- 3. जब पता चलता है कि उपयोगकर्ता जावा
- 4. जीसीएम उपयोगकर्ता फोन का पता कैसे लगाता है
- 5. SqlDataReader पता लगाता है कि कोई डेटा फ़ील्ड शून्य है
- 6. PHP पता लगाता है कि खोज दिनांक है या नहीं
- 7. फ्लेक्स 4 पता लगाता है कि क्या उपयोगकर्ता कुंजी दर्ज करता है
- 8. jQuery.html (कुछ) पता लगाता है कि इंजेक्शन पूरा होने पर
- 9. एंड्रॉइड 4.0 पता लगाता है कि उपयोगकर्ता के पास हार्डवेयर बैक/होम कुंजियां हैं
- 10. jQuery एनीमेशन एनिमेटिंग अगर पता लगाता है?
- 11. ओपनसीवी समरूप चौराहे का पता लगाता है
- 12. जावा हैशैप टकराव का पता लगाता है
- 13. पता लगाएं कि उपयोगकर्ता टेक्स्टरेरा
- 14. पता लगाएं कि उपयोगकर्ता द्वारा
- 15. जेएस: पता लगाएं कि जब उपयोगकर्ता बटन
- 16. पता लगाएं कि कोई उपयोगकर्ता UITextView
- 17. सॉकेट आईओ पता लगाता है कि क्लाइंट कनेक्शन खो गया है
- 18. व्यूपार्जर वेबव्यू मेमोरी इश्यू
- 19. Android SuperUser ऐप कैसे पता लगाता है कि ऐप रूट अनुरोध करता है?
- 20. प्रोग्रामेटिक रूप से पता लगाता है कि कौन सा SQL सर्वर प्रिंसिपल है, जो दर्पण है?
- 21. गणना कैसे करें कि उपयोगकर्ता वेब पेज पर कितना समय लगाता है?
- 22. यह कैसे पता चलेगा कि उपयोगकर्ता डेटाग्रिडव्यू
- 23. पता लगाएं कि उपयोगकर्ता ने बैक बटन
- 24. गिट कैसे पता लगाता है कि एक फ़ाइल संशोधित की गई है?
- 25. JQuery पता लगाता है कि कोई टैग स्वयं बंद हो रहा है
- 26. विजुअल स्टूडियो यह पता लगाता है कि हॉटकी को क्या आदेश दिया गया है
- 27. प्रोग्रामेटिक रूप से पता लगाता है कि आईपैड में रेटिना डिस्प्ले है या नहीं?
- 28. पीएचपी कैसे पता लगाता है कि एक सत्र का समय समाप्त हो गया है?
- 29. वसंत कैसे पता लगाता है कि प्रॉक्सी ऑब्जेक्ट को इंजेक्शन देने की आवश्यकता है?
- 30. jQuery पता लगाता है कि क्या माता-पिता ने 'फोकस' खो दिया है
हाय सब, मैं कोड का इस्तेमाल किया है, लेकिन onSwipeOutLister विधि मेरी गतिविधि में नहीं बुलाया जाता है, भले ही मैं विधि कॉल: इस कोड मैं यह काम, दोनों onSwipeOutAtStart और onSwipeOutAtEnd साथ बनाने के लिए प्रयोग किया जाता है। कृपया मेरा प्रश्न पोस्ट करें http://stackoverflow.com/questions/25889115/android-viewpager-detect-swipe-beyond-the-bounds –