java - 检测滑动,点击,按住一个 View Android

标签 java android listview listener swipe-gesture

我有一个 ImageView,它填满了我的整个 Activity。我需要能够检测到 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;
              }
             });

现在我正在尝试使用这个问题中的代码来实现向右滑动和向左滑动操作。 Android Swipe on List问题在于它适用于 ListView ,您可以在其中为整个 ListView 实现一个 onTouchListener,为列表项实现一个单独的 onItemClickListener。尽管只有一个 Listener 可用,但我不知道如何使它适应这种情况。

最佳答案

手势检测器是必经之路。

或者,

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

关于java - 检测滑动,点击,按住一个 View Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35787430/

相关文章:

android - 在 Android 谷歌地图 v2 中打开自定义信息窗口

android - Android应用程序可从IBM Bluemix IoT Watson Cloud Platform访问JSON数据

asp.net - 如何从(对象发送者,ListViewItemEventArgs e)转换对象

java - Android - 清除导航后退栈

java - 消息格式线程安全

java - 第一次应用程序启动时再次加载 Activity

android - 如何获取 Android 联系人缩略图

java - 应用程序启动失败 - 无法处理配置类的导入候选

java - GSON:使用随机类名反序列化 Json

android - 按日期对 ListView 进行排序?