• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

android - 网格布局上的 Fling 手势检测

[复制链接]
菜鸟教程小白 发表于 2022-8-1 01:25:50 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我想得到fling手势检测在我的 Android 应用程序中工作。

我拥有的是 GridLayout包含 9 ImageView s。来源可以在这里找到:Romain Guys's Grid Layout .

我拿的那个文件来自 Romain Guy 的 Photostream application并且只是稍作改编。

对于简单的点击情况,我只需要设置 onClickListener对于每个 ImageView我加为主要activity实现View.OnClickListener .实现识别 fling 的东西似乎要复杂得多。 .我想这是因为它可能跨越 views ?

  • 如果我的 Activity 实现OnGestureListener我不知道怎么做
    将其设置为手势监听器GridImage我的观点
    添加。
    public class SelectFilterActivity extends Activity implements
       View.OnClickListener, OnGestureListener { ...
    
  • 如果我的 Activity 实现OnTouchListener那么我没有onFling方法 override (它有
    两个事件作为参数允许我
    来确定 throw 是否是
    值得注意)。
    public class SelectFilterActivity extends Activity implements
        View.OnClickListener, OnTouchListener { ...
    
  • 如果我定制 View ,如 GestureImageView扩展 ImageView我不知道如何告诉 Activity fling从 View 中已经发生。无论如何,我尝试了这个,当我触摸屏幕时没有调用这些方法。

  • 我真的只需要一个跨 View 工作的具体示例。什么,何时以及如何附上这个 listener ?我还需要能够检测到单击。
    // Gesture detection
    mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
    
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            int dx = (int) (e2.getX() - e1.getX());
            // don't accept the fling if it's too short
            // as it may conflict with a button push
            if (Math.abs(dx) > MAJOR_MOVE && Math.abs(velocityX) > Math.absvelocityY)) {
                if (velocityX > 0) {
                    moveRight();
                } else {
                    moveLeft();
                }
                return true;
            } else {
                return false;
            }
        }
    });
    

    是否可以在我的屏幕顶部放置一个透明 View 来捕捉一闪而过?

    如果我选择不inflate我的子 ImageView 来自 XML 我可以通过 GestureDetector作为 ImageView 的新子类的构造函数参数我创造的?

    这是我试图获得 fling 的非常简单的 Activity 。检测工作:SelectFilterActivity (Adapted from photostream) .

    我一直在寻找这些来源:
  • Detect Gestures - Tutorial
  • SDK docs
  • Calculator Code

  • 到目前为止,没有什么对我有用,我希望得到一些指示。



    Best Answer-推荐答案


    感谢 Code Shogun ,我根据自己的情况调整了他的代码。

    让您的 Activity 实现OnClickListener照常:

    public class SelectFilterActivity extends Activity implements OnClickListener {
    
      private static final int SWIPE_MIN_DISTANCE = 120;
      private static final int SWIPE_MAX_OFF_PATH = 250;
      private static final int SWIPE_THRESHOLD_VELOCITY = 200;
      private GestureDetector gestureDetector;
      View.OnTouchListener gestureListener;
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        /* ... */
    
        // Gesture detection
        gestureDetector = new GestureDetector(this, new MyGestureDetector());
        gestureListener = new View.OnTouchListener() {
          public boolean onTouch(View v, MotionEvent event) {
            return gestureDetector.onTouchEvent(event);
          }
        };
    
      }
    
      class MyGestureDetector extends SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
          try {
            if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
              return false;
            // right to left swipe
            if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
              Toast.makeText(SelectFilterActivity.this, "Left Swipe", Toast.LENGTH_SHORT).show();
            } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
              Toast.makeText(SelectFilterActivity.this, "Right Swipe", Toast.LENGTH_SHORT).show();
            }
          } catch (Exception e) {
             // nothing
          }
          return false;
        }
    
        @Override
        public boolean onDown(MotionEvent e) {
          return true;
        }
      }
    }
    

    将您的手势监听器附加到您添加到主布局的所有 View ;
    // Do this for each view added to the grid
    imageView.setOnClickListener(SelectFilterActivity.this); 
    imageView.setOnTouchListener(gestureListener);
    

    敬畏地观看你被覆盖的方法,onClick(View v) Activity 和onFling手势监听器。
    public void onClick(View v) {
      Filter f = (Filter) v.getTag();
      FilterFullscreenActivity.show(this, input, f);
    }
    

    后“ throw ”舞蹈是可选的,但鼓励。

    关于android - 网格布局上的 Fling 手势检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/937313/

    回复

    使用道具 举报

    懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关注0

    粉丝2

    帖子830918

    发布主题
    阅读排行 更多
    广告位

    扫描微信二维码

    查看手机版网站

    随时了解更新最新资讯

    139-2527-9053

    在线客服(服务时间 9:00~18:00)

    在线QQ客服
    地址:深圳市南山区西丽大学城创智工业园
    电邮:jeky_zhao#qq.com
    移动电话:139-2527-9053

    Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap