8

मैं बाएं-दाएं स्वाइप करने योग्य कार्ड सिस्टम (टिंडर की तरह) बनाने की कोशिश कर रहा हूं, जहां कार्ड पर NestedScrollView है। लक्ष्य यह होगा कि यदि उपयोगकर्ता केवल ऊपर और नीचे स्वाइप हो जाता है, तो NestedScrollView स्क्रॉल करेगा, लेकिन यदि उपयोगकर्ता बाएं या दाएं स्वाइप करता है, तो कार्ड उस स्वाइप का उपयोग करेगा।एंड्रॉइड नेस्टेडस्क्रॉल देखें माता-पिता को क्षैतिज स्वाइप देखें

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_margin="4dp" 
    card_view:cardUseCompatPadding="true"> 

    <android.support.v4.widget.NestedScrollView 
     android:id="@+id/nested_scroll_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:padding="4dp"> 

      <TextView 
       android:id="@+id/text_view" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/recycler" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

     </LinearLayout> 

    </android.support.v4.widget.NestedScrollView> 

</android.support.v7.widget.CardView> 

(कार्ड पुस्तकालय मैं उपयोग कर रहा हूँ है https://github.com/wenchaojiang/AndroidSwipeableCardStack)

compile 'com.github.wenchaojiang:AndroidSwipeableCardStack:0.1.5' 

जब मैं NestedScrollView और कहा कि मार्जिन के भीतर छूने पर एक margin_top शब्दों में कहें, Cardstack सही ढंग से पकड़ लेता है मेरी इनपुट और कार्ड चाल छोड़ दिया है या ठीक है, लेकिन NestedScrollView दिशा के बावजूद मेरे इनपुट को पकड़ लेता है अगर मैं कहीं और स्पर्श और खींचता हूं।

कौन सा वर्ग/ऑन टचवेन्ट मुझे इस प्रभाव के लिए विस्तार/ओवरराइड करना चाहिए, या शायद एक आसान दृष्टिकोण हो सकता है?

धन्यवाद!

+0

मैं भी, इस यह पता लगाने की कोशिश कर रहा हूँ पर विचार और कोशिश कर रहा ... 1) onInterceptTouch माता पिता कक्षा में (रिकॉर्डिंग चरणों शायद और भेजने?) 2) लागू किया NestedChildHelper 2 करने के लिए पुस्तकालय को संशोधित) ItemTouchHelper साथ Recyclerview .. अब तक बहुत मुश्किल है। । निश्चित नहीं है कि क्या मायने रखता है, लेकिन अब तक जिन पुस्तकालयों का मैं प्रयास कर रहा हूं वे मिलकर शफल और स्वाइपस्टैक हैं। https://github.com/Meetic/Shuffle और https://github.com/flschweiger/SwipeStack – nAndroid

+0

उन पुस्तकालयों में से एक का उपयोग रीसाइक्लर्विव बी/सी से बेहतर है, वे बहुत कुछ करते हैं। – nAndroid

+0

मेरा मानना ​​है कि इंटरसेप्ट टचइवेंट() वह तरीका है जिसे आप ढूंढ रहे हैं। Https://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent(android.view.MotionEvent देखें) –

उत्तर

0

हां, आपको जावा कोड कार्डकाक.कार्डइवेंट लिस्टनर पर लागू करके इसे करना चाहिए, और इसे श्रोता mCardStack.setListener (yourListener) के रूप में सेट करना चाहिए; यह परियोजना के अंदर रीडमी पर है। इसे आज़माएं:

Class YourListener extends CardStack.CardEventListener{ 
    //implement card event interface 
    @Override 
    public boolean swipeEnd(int direction, float distance) { 
     //if "return true" the dismiss animation will be triggered 
     //if false, the card will move back to stack 
     //distance is finger swipe distance in dp 


     return (distance>300)? true : false; 
    } 

    @Override 
    public boolean swipeStart(int direction, float distance) { 

     return true; 
    } 

    @Override 
    public boolean swipeContinue(int direction, float distanceX, float distanceY) { 

     return true; 
    } 

    @Override 
    public void discarded(int id, int direction) { 
     //this callback invoked when dismiss animation is finished. 
    } 

    @Override 
    public void topCardTapped() { 
     //this callback invoked when a top card is tapped by user. 
    } 
} 
+0

mmeloti - यह काम नहीं करता क्योंकि swipestack इस लाइबेरे – nAndroid

+0

के साथ ठीक से काम नहीं करता है समस्या समस्या swipestack है? मुझे नहीं पता, आपके एक्सएमएल में एक समस्या की तरह लगता है, लेकिन कोड जावा के बिना। समस्या को ट्रैक करने के लिए असंभव ... – mmelotti

+0

mmeloti - जहां भी आपके पास स्क्रॉलव्यू में एक स्वाइपस्टैक है, वहां कोई भी स्थिति जहां वे दोनों काम करते हैं। https://github.com/neiljaywarner/TestSwipeStack देखें – nAndroid

0

मैं अपने ऐप के लिए 2 इंटरफेस के लिए ऐसा करता हूं। GestureDetector और onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) पर क्षैतिज गति की जांच करें। विचारों के लिए एक निश्चित दहलीज पास या अवरोध स्पर्श घटना के बाद। आप टच एपीआई से ईवेंट को अवरुद्ध या पास करने के तरीके की जांच कर सकते हैं।

यह एक सामान्य समाधान है जिसे आप का उपयोग करते हुए दृश्य समूह या दृश्य से स्वतंत्र हैं। आप अपने लेआउट या कस्टम व्यू पर जाने से पहले ईवेंट का उपभोग करते हैं।

टच घटनाक्रम से प्रसारित रूप

  1. Activity.dispatchTouchEvent()
  2. ViewGroup.dispatchTouchEvent()
  3. View.dispatchTouchEvent()
  4. View.onTouchEvent()
  5. ViewGroup.onTouchEvent ()
  6. गतिविधि.ऑन टचवेन्ट()

यदि आप अपनी गतिविधि के प्रेषण टचएवेंट() विधि के अंदर GestureDetector का उपयोग करते हैं तो आप ईवेंट को समूह या दृश्यों को सही ढंग से उपभोग या प्रसारित करने में सक्षम होंगे।

@Override 
public boolean dispatchTouchEvent(MotionEvent event) { 
    gestureDetector.onTouchEvent(event); 
    // Be sure to call the superclass implementation 
    return super.dispatchTouchEvent(event); 
} 
संबंधित मुद्दे