2017-07-18 4 views
1

Donc j'ai été dans cela pendant un certain temps maintenant et n'ai pas été en mesure de comprendre comment implémenter la reconnaissance de balayage à 4 voies dans Android. J'ai trouvé différents liens pointant vers différentes solutions mais aucun d'eux ne répond à mes exigences.Badoo comme cartes à puce

Ce que je souhaite accomplir est d'accomplir un geste de balayage de «Badoo». Badoo est une application similaire à Tinder. En faisant défiler vers le haut/bas les images de l'utilisateur sont défilées, et sur la gauche/droite, la carte est aimée/détestée.

L'animation que je souhaite réaliser est que sur la gauche/droite, la carte suit le chemin gauche/droite et passe à aimer/ne pas aimer. En haut/en bas, les images sont alignées sur les images suivantes/précédentes.

J'ai essayé d'innombrables bibliothèques sur github pour les cartes à glisser et j'essaie maintenant de mettre en œuvre une vue personnalisée pour mes besoins.

Actuellement j'essaye d'insérer un VerticalViewPager dans un CardView. Le problème ici est que VerticalViewPager intercepte tous les événements tactiles, donc je suis incapable de glisser ma carte à droite/à gauche.

Ceci est mon événement OnTouch pour l'élément Vignettes:

public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction()) { 
    case MotionEvent.ACTION_MOVE: 
     pager.requestDisallowInterceptTouchEvent(true); 
     break; 
    case MotionEvent.ACTION_UP: 
    case MotionEvent.ACTION_CANCEL: 
     pager.requestDisallowInterceptTouchEvent(false); 
     break; 
    } 
    return true; 
} 

C'est ce que je suis en train de réaliser. C'est ce que Badoo ressemble:

Badoo Screenshot 1: https://drive.google.com/open?id=0BzGcu10X5GRrTDZHRm4xT0tnQ1k Badoo Capture d'écran 2: https://drive.google.com/open?id=0BzGcu10X5GRrc2pvRTZKS2p2UEU

Si quelqu'un connaît des bibliothèques similaires avec un même geste de balayage 4 voies s'il vous plaît laissez-moi savoir.

EDIT:

Je l'ai fait une vue parent pour la carte et le ViewPager, la Vignettes (cardViewParent) a un enfant enfant Vignettes et Vignettes est un VerticalViewPager (mViewPager):

cardViewParent.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View view, MotionEvent event) { 
       Toast.makeText(context, "incardviewPARENT", Toast.LENGTH_SHORT).show(); 

       float rawX = 0, rawY = 0; 

       switch (event.getAction()) { 


        case MotionEvent.ACTION_DOWN: 
         //gesture has begun 
         float x; 
         float y; 
         //cancel any current animations 

         mActivePointerId[0] = event.getPointerId(0); 

         x = event.getX(); 
         y = event.getY(); 
         rawX = event.getRawX(); 
         rawY = event.getRawY(); 


         initialXPress[0] = x; 
         initialYPress[0] = y; 
         initialRawXPress[0] = rawX; 
         initialRawYPress[0] = rawY; 

         break; 

        case MotionEvent.ACTION_MOVE: 
         //gesture is in progress 

         final int pointerIndex = event.findPointerIndex(mActivePointerId[0]); 
         //Log.i("pointer index: " , Integer.toString(pointerIndex)); 
         if (pointerIndex < 0 || pointerIndex > 0) { 
          break; 
         } 

         final float xMove = event.getX(pointerIndex); 
         final float yMove = event.getY(pointerIndex); 
         float rawDY = Math.abs(event.getRawY() - 
         initialRawYPress[0]); 
         float rawDX = Math.abs(event.getRawX() - initialRawXPress[0]); 

         //calculate distance moved 
         final float dx = xMove - initialXPress[0]; 
         final float dy = yMove - initialYPress[0]; 
         Log.d("RAW DY:", "" + rawDY); 

         if(rawDY > 100 && !animationStart[0]) 
         { 
          // vertical swipe detected 
          mViewPager.setSwipeable(true); 
          cardStack.setSWIPE_ENABLED(false); 
          // mViewPager.dispatchTouchEvent(event); 
          return false; 
         } 

         if((rawDY <100 && rawDX > 100) || 
         animationStart[0]) { 

          //horizontal swipe 

          animationStart[0] = true; 
          cardStack.setSWIPE_ENABLED(true); 
          mViewPager.setSwipeable(false); 
          // cardStack.dispatchTouchEvent(event); 
          return false; 

         } 

       } 

       return true; 

      } 
     }); 

Si un mouvement de balayage vers le haut est détecté, j'active le mouvement de balayage du ViewPager, sinon le balayage de carte (glisser-déposer) est activé. Le problème est que le mouvement de balayage ne commence dans aucune direction.

+0

Hey Sabeeh Zaidi je suis face même problème que je suis en utilisant swipe de la carte et la mise en œuvre indicateur de viewpager quand je suis mise en œuvre de swipe carte indicateur de viewpager ne fonctionne pas, juste Je veux implémenter cardswipe avec viewpagerindicator comme application badoo, comment l'implémenter, pouvez-vous me laisser un mail, ou démo, ou un lien. –

+1

Je l'ai eu en travaillant en appelant manuellement le OnTouch de l'enfant lorsque la direction nécessaire a été reconnue à partir du balayage dans le parent. Je posterai le code ici dans quelques temps. Aurez besoin de le déterrer. –

+0

Merci Sabeeh Zaidi –

Répondre