只好透過利用OnTouchListener來自己寫一個滑動手勢的判斷。
如果想要在一個ImageView圖片上判斷滑動的手勢,
先在xml檔裡面建立一個ImageView的物件,以及一個TextView顯示判斷結果。
接著在MainActivity.java裡先設定好前置作業:
- private int swipe_d = 10; // threshold for swipe distance
- private TextView tvText;
- private ImageView ivImage;
onCreate中在要判斷的ImageView上設定一個setOnTouchListener:
- tvText = (TextView)findViewById(R.id.id_tvText);
- ivImage = (ImageView)findViewById(R.id.id_ivImage);
- ivImage.setOnTouchListener(bgImgListener);
加入一個OnTouchListener的函式,透過觸控的x、y座標來判斷手勢操作
- private View.OnTouchListener bgImgListener = new View.OnTouchListener() {
- float x1, x2, y1, y2;
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- switch (event.getAction()) {
- case MotionEvent.ACTION_DOWN:
- x1 = event.getX();
- y1 = event.getY();
- break;
- case MotionEvent.ACTION_UP:{
- x2 = event.getX();
- y2 = event.getY();
- if (x1 < x2 && Math.abs(y1-y2) < Math.abs(x1-x2) && Math.abs(x1-x2) > swipe_d) {
- tvText.setText("Swipe Right");
- }
- else if (x1 > x2 && Math.abs(y1-y2) < Math.abs(x1-x2) && Math.abs(x1-x2) > swipe_d) {
- tvText.setText("Swipe Left");
- }
- else if (y1 < y2 && Math.abs(x1-x2) < Math.abs(y1-y2) && Math.abs(y1-y2) > swipe_d) {
- tvText.setText("Swipe Down");
- }
- else if (y1 > y2 && Math.abs(x1-x2) < Math.abs(y1-y2) && Math.abs(y1-y2) > swipe_d) {
- tvText.setText("Swipe Up");
- }
- else if(x1 == x2 && y1 == y2){
- tvText.setText("Click");
- }
- break;
- }
- }
- return true;
- }
- };
(END)
沒有留言:
張貼留言