2017-01-10 11 views
0

Как обнаружить клик, длительное нажатие и прокрутку (все 4 направления) на любом изображении, например. кнопка в андроиде? Это сделано в клавиатуре Android (9-клавишная). при выборе алфавита отображаются 4 других параметра и в зависимости от направления движения, выбран соответствующий символ.Как обнаружить клик, длительное нажатие и прокрутку (все 4 направления) на любом изображении, например. кнопка в android

ответ

0

OnSwipeTouchListener.java

import android.view.GestureDetector; 
import android.view.GestureDetector.SimpleOnGestureListener; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 

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

Как вы будете использовать

Пусть Предположим, у вас есть вид изображения

imageView.setOnTouchListener(new OnSwipeTouchListener(MyActivity.this) { 
    public void onSwipeTop() { 
     Toast.makeText(MyActivity.this, "top", Toast.LENGTH_SHORT).show(); 
    } 
    public void onSwipeRight() { 
     Toast.makeText(MyActivity.this, "right", Toast.LENGTH_SHORT).show(); 
    } 
    public void onSwipeLeft() { 
     Toast.makeText(MyActivity.this, "left", Toast.LENGTH_SHORT).show(); 
    } 
    public void onSwipeBottom() { 
     Toast.makeText(MyActivity.this, "bottom", Toast.LENGTH_SHORT).show(); 
    } 

}); 
imageView.setOnLongClickListener(new OnLongClickListener() { 

    @Override 
    public boolean onLongClick(View v) { 
        //your stuff 
     return true; 
    } 
}); 
imageView.setOnClickListener(new OnClickListener() { 
    @Override 
    public boolean onClick(View v) { 
     //your stuff 
     return true; 
    } 
}); 
+0

я попытался это по линейной компоновки, однако, нажмите и длинный клик не работает ... только салфетки работает ... пожалуйста, помогите .. – jaIn

+0

также, это нам Тем не менее, мне нужен салфетки, в которой пользователь не поднимает палец, и все же он получает обновленное направление (только при перемещении), точно так же, как и на клавиатуре ... – jaIn

+0

хочет сначала проверить любой другой вид Работает ? –