android 手势 GestureDetector onScroll方法的探讨

最近研究了下 gpuimage的滤镜 , 在封装了滤镜控件后,对滤镜容器设置手势时出现了以下问题:

问题描述

主要问题就是GestureDetector onScroll distance 数据抖动;
在这里插入图片描述
在用手势对象捕捉了dispatchTouchEvent事件后, 本打算 在 onScroll方法中对容器view进行滑动的变化, 第一时间想到使用 translateX和translateY 属性对view进行滑动;

在这里插入图片描述

//sum 每次的移动距离;
mTranslateX += distanceX;
mTranslateY += distanceY;
//设置translate属性;
setTranslationX(mTranslateX);
setTranslationY(mTranslateY);

但是当使用setTranslationX()方法设置属性后,滑动是能滑动,会出现抖动效果,通过打印得知distanceX 会出现两种,一会儿正,一会儿负,导致出现抖动; 用户体验效果很差;

问题原因

Left = x + translationX 理论上是没错的; 只可能的原因是设置了setTranslationX方法后影响到了GestureDetector的onscroll 方法的distanceX,出现正负交替出现;

查看方法注释为:
在这里插入图片描述
再看下GestureDetector的回调出onScroll方法的地方 onTouchEvent方法

在这里插入图片描述
重点看下MotionEvent.ACTION_MOVE 事件
在这里插入图片描述
当我长按时,控件出现不停的闪烁,只可能是进入最后一个判断方法了,这里变化的只有focusX这个关于焦点的变量; 难道是setTranslateX改变了焦点,影响了多指触摸?? 但是我一直全程单指按住,画面一直闪烁,仿佛是两个点触摸一样; 看到这里没法解释了:(;

问题解决
后来 将 setTranslate方法改为setScrollX方法,完美解决,通过移动内容,不改变位置属性为什么就不会抖动了呢,不得而知,欢迎看到的朋友踊跃解释一下;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值