Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检测刷卡,单击,按住一个视图_Java_Android_Listview_Listener_Swipe Gesture - Fatal编程技术网

Java 检测刷卡,单击,按住一个视图

Java 检测刷卡,单击,按住一个视图,java,android,listview,listener,swipe-gesture,Java,Android,Listview,Listener,Swipe Gesture,我有一个图像视图,它填满了我的整个活动。我需要能够检测4个触摸事件: 保持(超过400毫秒) 点击 左击 向右滑动 目前,我能够使用以下代码检测前两个: imageView.setOnTouchListener(new View.OnTouchListener() { private Timer timerr = new Timer(); private long LONG_PRESS_TIMEOUT = 400; // TODO: your timeout here

我有一个
图像视图
,它填满了我的整个
活动
。我需要能够检测4个触摸事件:

  • 保持(超过400毫秒)
  • 点击
  • 左击
  • 向右滑动
目前,我能够使用以下代码检测前两个:

imageView.setOnTouchListener(new View.OnTouchListener() {

    private Timer timerr = new Timer();
    private long LONG_PRESS_TIMEOUT = 400; // TODO: your timeout here
    private boolean wasLong = false;

    @Override
    public boolean onTouch(View v, MotionEvent event) {
      Log.d(getClass().getName(), "touch event: " + event.toString());

      if (event.getAction() == MotionEvent.ACTION_DOWN) {
       // HOLD DETECTED
       timerr.schedule(new TimerTask() {
          @Override
          public void run() {
            SlideShow.this.runOnUiThread(new Runnable() {
              @Override
              public void run() {

              }, LONG_PRESS_TIMEOUT);
             return true;
            }

            if (event.getAction() == MotionEvent.ACTION_UP) {
             if (!isPaused && !wasLong) {
              // CLICK DETECTED
              timerr.cancel();
              timerr = new Timer();
              if (!wasLong) {

               return false;
              }
             });

现在,我尝试使用这个问题中的代码来实现向右滑动和向左滑动操作。问题是这在listview上有效,在listview中可以为整个listview实现一个
onTouchListener
,为列表项实现一个单独的
onItemClickListener
。我不知道如何适应这种情况,尽管只有一个听者可用。

在继续之前,你应该通读一遍。安卓系统已经将滑动检测融入其中。

手势检测是一个不错的选择

或者

 image.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()) {

                case MotionEvent.ACTION_DOWN:
                    x1 = event.getX();
                    y1 = event.getY();
                    t1 = System.currentTimeMillis();
                    return true;
                case MotionEvent.ACTION_UP:
                    x2 = event.getX();
                    y2 = event.getY();
                    t2 = System.currentTimeMillis();

                    if (x1 == x2 && y1 == y2 && (t2 - t1) < CLICK_DURATION) {
                        Toast.makeText(getActivity(), "Click", Toast.LENGTH_SHORT).show();
                    } else if ((t2 - t1) >= CLICK_DURATION) {
                        Toast.makeText(getActivity(), "Long click", Toast.LENGTH_SHORT).show();
                    } else if (x1 > x2) {
                        Toast.makeText(getActivity(), "Left swipe", Toast.LENGTH_SHORT).show();
                    } else if (x2 > x1) {
                        Toast.makeText(getActivity(), "Right swipe", Toast.LENGTH_SHORT).show();
                    } 


                    return true;
            }

            return false;
        }
image.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
x1=event.getX();
y1=event.getY();
t1=System.currentTimeMillis();
返回true;
case MotionEvent.ACTION\u UP:
x2=event.getX();
y2=event.getY();
t2=System.currentTimeMillis();
如果(x1==x2&&y1==y2&&(t2-t1)<点击持续时间){
Toast.makeText(getActivity(),“Click”,Toast.LENGTH_SHORT.show();
}否则如果((t2-t1)>=单击持续时间){
Toast.makeText(getActivity(),“长点击”,Toast.LENGTH_SHORT.show();
}否则如果(x1>x2){
Toast.makeText(getActivity(),“左扫”,Toast.LENGTH_SHORT.show();
}否则如果(x2>x1){
Toast.makeText(getActivity(),“右击”,Toast.LENGTH_SHORT.show();
} 
返回true;
}
返回false;
}