2017-09-21 9 views
0

私は6つのボタン(緑色)が開いているアプリがあります。このボタンの上には、スワイプリスナーに使用する別のボタンがあります。Android別のボタンの後ろにあるボタンをクリック

スワイプが検出されない場合(クリック)緑色のボタンをクリックしたい場合は、赤色のボタンでトリガされたスワイプアクションを実行します。ここ

img1

私TouchListenerは私がリスナーを初期化する場所です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() {} 
} 

から取られています。

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() {} 
}); 

スワイプは機能しますが、クリックすることはできません。

+0

あなたのonClickListenerはどこですか? – Ankita

+0

'GestureListener'には赤いボタンは必要ありません。シンプルなレイアウトでも仕事ができます。 –

+0

@MuratK。しかし、全面にリスナーが必要です。ボタンだけではありません。 – CBeTJlu4ok

答えて

1

固定3x3ビューのGridViewを使用してください。 そこには、あなたのGridView

よう
grid.setOnTouchListener(new OnSwipeTouchListener(mContext) 
     { 

      public void onSwipeRight() 
      { 

      } 

      public void onSwipeLeft() 
      { 

      } 

     }); 

にスワイプジェスチャーを設定することができ、また、あなたが非常に少ないコーディングでより多くのボタンを追加することができ、将来のために

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

      }); 

を設定することができます。

+0

おかげさまで、私がそれに着くとすぐに試しています。緑色のボタンは既にGridViewに入っていますので、リスナーを入力するだけです。 – CBeTJlu4ok

+0

@ CBeTJlu4okこれがあなたの要件に役立つ場合は、回答を受け入れることができます – Akshay

関連する問題