腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
搜索
搜索
关闭
发布
首页
标签
move
#
move
关注
专栏文章
(45)
技术视频
(0)
互动问答
(2)
FreeRTOS任务中无法使用函数内参数,该怎么办?
0
回答
c 语言
、
机器人
、
double
、
freertos
、
move
如何提高onTouchEvent中ACTION_MOVE的监听频率?
1
回答
action
、
move
gavin1024
在Android中,`onTouchEvent`方法用于处理触摸事件。`ACTION_MOVE`事件表示用户在屏幕上移动手指。默认情况下,`ACTION_MOVE`事件的监听频率可能不高,因为系统会对触摸事件进行一定程度的抽样。要提高`ACTION_MOVE`事件的监听频率,可以尝试以下方法: 1. 使用`VelocityTracker`:`VelocityTracker`是一个用于跟踪触摸事件速度的工具类。在`onTouchEvent`方法中,可以使用`VelocityTracker`来获取手指移动的速度。这样,即使`ACTION_MOVE`事件的监听频率较低,也可以更准确地计算手指的速度。 ```java private VelocityTracker mVelocityTracker; @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); float x = event.getX(); float y = event.getY(); if (mVelocityTracker == null) { mVelocityTracker = VelocityTracker.obtain(); } mVelocityTracker.addMovement(event); switch (action) { case MotionEvent.ACTION_DOWN: // 处理按下事件 break; case MotionEvent.ACTION_MOVE: // 处理移动事件 mVelocityTracker.computeCurrentVelocity(1000); // 计算速度,参数为单位时间(毫秒) float xVelocity = mVelocityTracker.getXVelocity(); // 获取水平速度 float yVelocity = mVelocityTracker.getYVelocity(); // 获取垂直速度 // 根据速度处理其他逻辑 break; case MotionEvent.ACTION_UP: // 处理抬起事件 break; } return true; } ``` 2. 使用`Scroller`:`Scroller`是一个用于处理滚动效果的工具类。在`onTouchEvent`方法中,可以使用`Scroller`来实现平滑的滚动效果。这样,即使`ACTION_MOVE`事件的监听频率较低,也可以实现平滑的滚动效果。 ```java private Scroller mScroller; @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); float x = event.getX(); float y = event.getY(); if (mScroller == null) { mScroller = new Scroller(getContext()); } switch (action) { case MotionEvent.ACTION_DOWN: // 处理按下事件 if (!mScroller.isFinished()) { mScroller.abortAnimation(); } break; case MotionEvent.ACTION_MOVE: // 处理移动事件 int deltaX = (int) (mLastX - x); int deltaY = (int) (mLastY - y); scrollBy(deltaX, deltaY); // 滚动视图 break; case MotionEvent.ACTION_UP: // 处理抬起事件 int startX = getScrollX(); int startY = getScrollY(); int dx = (int) (mLastX - x); int dy = (int) (mLastY - y); mScroller.startScroll(startX, startY, dx, dy); invalidate(); // 请求重绘 break; } return true; } @Override public void computeScroll() { if (mScroller.computeScrollOffset()) { scrollTo(mScroller.getCurrX(), mScroller.getCurrY()); postInvalidate(); // 请求重绘 } } ``` 通过以上方法,可以提高`onTouchEvent`中`ACTION_MOVE`事件的监听频率。在实际应用中,可以根据需求选择合适的方法。...
展开详请
赞
0
收藏
0
评论
0
分享
在Android中,`onTouchEvent`方法用于处理触摸事件。`ACTION_MOVE`事件表示用户在屏幕上移动手指。默认情况下,`ACTION_MOVE`事件的监听频率可能不高,因为系统会对触摸事件进行一定程度的抽样。要提高`ACTION_MOVE`事件的监听频率,可以尝试以下方法: 1. 使用`VelocityTracker`:`VelocityTracker`是一个用于跟踪触摸事件速度的工具类。在`onTouchEvent`方法中,可以使用`VelocityTracker`来获取手指移动的速度。这样,即使`ACTION_MOVE`事件的监听频率较低,也可以更准确地计算手指的速度。 ```java private VelocityTracker mVelocityTracker; @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); float x = event.getX(); float y = event.getY(); if (mVelocityTracker == null) { mVelocityTracker = VelocityTracker.obtain(); } mVelocityTracker.addMovement(event); switch (action) { case MotionEvent.ACTION_DOWN: // 处理按下事件 break; case MotionEvent.ACTION_MOVE: // 处理移动事件 mVelocityTracker.computeCurrentVelocity(1000); // 计算速度,参数为单位时间(毫秒) float xVelocity = mVelocityTracker.getXVelocity(); // 获取水平速度 float yVelocity = mVelocityTracker.getYVelocity(); // 获取垂直速度 // 根据速度处理其他逻辑 break; case MotionEvent.ACTION_UP: // 处理抬起事件 break; } return true; } ``` 2. 使用`Scroller`:`Scroller`是一个用于处理滚动效果的工具类。在`onTouchEvent`方法中,可以使用`Scroller`来实现平滑的滚动效果。这样,即使`ACTION_MOVE`事件的监听频率较低,也可以实现平滑的滚动效果。 ```java private Scroller mScroller; @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); float x = event.getX(); float y = event.getY(); if (mScroller == null) { mScroller = new Scroller(getContext()); } switch (action) { case MotionEvent.ACTION_DOWN: // 处理按下事件 if (!mScroller.isFinished()) { mScroller.abortAnimation(); } break; case MotionEvent.ACTION_MOVE: // 处理移动事件 int deltaX = (int) (mLastX - x); int deltaY = (int) (mLastY - y); scrollBy(deltaX, deltaY); // 滚动视图 break; case MotionEvent.ACTION_UP: // 处理抬起事件 int startX = getScrollX(); int startY = getScrollY(); int dx = (int) (mLastX - x); int dy = (int) (mLastY - y); mScroller.startScroll(startX, startY, dx, dy); invalidate(); // 请求重绘 break; } return true; } @Override public void computeScroll() { if (mScroller.computeScrollOffset()) { scrollTo(mScroller.getCurrX(), mScroller.getCurrY()); postInvalidate(); // 请求重绘 } } ``` 通过以上方法,可以提高`onTouchEvent`中`ACTION_MOVE`事件的监听频率。在实际应用中,可以根据需求选择合适的方法。
热门
专栏
哲学驱动设计
187 文章
52 订阅
calmound
235 文章
42 订阅
从ORACLE起航,领略精彩的IT技术。
593 文章
70 订阅
镁客网
4.2K 文章
61 订阅
安富莱嵌入式技术分享
874 文章
176 订阅
领券