swipe کردن با استفاده DispatchTouchEvent

0 امتیاز
45 بازدید
سوال شده آبان 25, 1394 توسط بی نام  
برچسب گذاری دوباره آبان 27, 1394 توسط ASHKARAN
سلام. من هرکاری کردم با دستورات MotionEvent.action_down و MotionEvent.action_up نتونستم دو مقدار رو ذخریه کنم.وقتی لاگ میگیرم از مقدار action_down و action_up همیشه یه مقدار ثابت میده.up رو 0 میده و down رو 1 میده.یعنی انگار فرقی نمیکنه من کجا دارم کلیک میکنم.لطفا راهنماییم کنید.مرسی.
این مطلب را به اشتراک بگذارید

1 پاسخ

0 امتیاز
پاسخ داده شده آبان 27, 1394 توسط ASHKARAN  
انتخاب شده آبان 30, 1394 توسط ASHKARAN
 
بهترین پاسخ

سلام

برای اینکه بتونید Swipe به چپ یا راست رو تشخیص بدید مراحل زیر رو دنبال بفرمایید:

یک کلاس جدید با نام زیر بسازید:

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

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

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

لینک اصلی پاسخ :

http://stackoverflow.com/a/12938787/3910962

موفق باشید.

979 سوال

819 پاسخ

1,329 دیدگاه

1,274 کاربر

متاسفانه نیستم

این مطلب را به اشتراک بگذارید

ali.ashkaran@gmail
ما .....
  • سعی بر پاسخگویی به سوالات دیگران داریم.
  • به سوال و یا نظر دیگران احترام می گذاریم .
  • این وبسایت را به دیگران معرفی می کنیم.
  • همواره صمیمیت و ادب را رعایت می کنیم.
  • به سوالمان برچسب های مرتبط اضافه می کنیم.
  • در حین طرح سوال فرد خاصی را مخاطب قرار نمی دهیم .
...