2017-09-21 6 views
0

J'ai 6 boutons (verts) qui ouvrent des applications. En plus de ces boutons, il y a un autre bouton que j'utilise pour l'écoute par balayage.Android Cliquez sur le bouton derrière un autre bouton

Si aucun balayage n'est détecté (clic) Je veux cliquer sur les boutons verts sinon effectuer une action de balayage déclenchée par le bouton rouge.

img1

ici est mon TouchListener pris de here

public class OnSwipeTouchListener implements OnTouchListener { 

    private final GestureDetector gestureDetector; 

    public OnSwipeTouchListener (Context ctx){ 
     gestureDetector = new GestureDetector(ctx, new GestureListener()); 
    } 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     return gestureDetector.onTouchEvent(event); 
    } 

    private final class GestureListener extends SimpleOnGestureListener { 

     private static final int SWIPE_THRESHOLD = 100; 
     private static final int SWIPE_VELOCITY_THRESHOLD = 100; 

     @Override 
     public boolean onDown(MotionEvent e) { 
      return true; 
     } 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
      boolean result = false; 
      try { 
       float diffY = e2.getY() - e1.getY(); 
       float diffX = e2.getX() - e1.getX(); 
       if (Math.abs(diffX) > Math.abs(diffY)) { 
        if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { 
         if (diffX > 0) { 
          onSwipeRight(); 
         } else { 
          onSwipeLeft(); 
         } 
         result = true; 
        } 
       } 
       else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) { 
        if (diffY > 0) { 
         onSwipeBottom(); 
        } else { 
         onSwipeTop(); 
        } 
        result = true; 
       } 
      } catch (Exception exception) { 
       exception.printStackTrace(); 
      } 
      return result; 
     } 
    } 

    public void onSwipeRight() {} 
    public void onSwipeLeft() {} 
    public void onSwipeTop() {} 
    public void onSwipeBottom() {} 
    public void onTap() {} 
} 

C'est là où je l'initialise auditeur.

Button ok = (Button) findViewById(R.id.btn_hex_over); 
final Context c = context; 

ok.setOnTouchListener(new OnSwipeTouchListener(getBaseContext()) { 
    public void onSwipeTop() {} 
    public void onSwipeBottom() {} 
    public void onTap() {} 
}); 

Le balayage fonctionne mais ne peut pas cliquer sur les boutons. Essayez d'utiliser GridView avec une vue 3x3 fixe.

+0

Où est votre onClickListener? – Ankita

+0

Vous n'avez pas besoin du bouton rouge pour un 'GestureListener'. Une mise en page simple fait aussi le travail. –

+0

@MuratK. Mais j'ai besoin d'un auditeur sur toute la surface et pas seulement des boutons – CBeTJlu4ok

Répondre

1

Il vous pouvez définir le geste de glisser sur votre GridView comme

grid.setOnTouchListener(new OnSwipeTouchListener(mContext) 
     { 

      public void onSwipeRight() 
      { 

      } 

      public void onSwipeLeft() 
      { 

      } 

     }); 

et vous pouvez définir

grid.setOnItemClickListener(new AdapterView.OnItemClickListener() 
      { 
       @Override 
       public void onItemClick(AdapterView<?> view, View cell, int position, long id) 
       { 
       } 

      }); 

Pour l'avenir, vous pouvez ajouter plus des boutons avec très moins de codage.

+0

Merci je l'essaie dès que j'y arrive. Les boutons verts sont déjà dans GridView donc je vais juste devoir mettre l'écouteur dedans. – CBeTJlu4ok

+0

@ CBeTJlu4ok si ceci vous aide dans votre condition vous pouvez accepter la réponse – Akshay