gpt4 book ai didi

Android:使用 onTouch 移动 View 有明显的滞后

转载 作者:太空狗 更新时间:2023-10-29 13:30:05 24 4
gpt4 key购买 nike

我正在研究 Android 的学习曲线,目前正在研究用户界面细节。我正在尝试的基本操作之一是用手指在屏幕上移动一些东西。似乎是一件非常基本的事情。

我从 RelativeLayout (RL) 开始,然后创建了一个具有对比背景颜色的 100x100 View (故意简单、低图形开销)并将该 View 添加到 RL。使用 View.setX 和 View.setY 我可以很好地移动 View 。

接下来,我向 View 添加了一个 onTouchListener 并使用生成的 .getRawX 和 .getRawY 值来移动 View 。它有效 - 但有一定的滞后。我希望 View 保持在我的手指下,但它落后了。这是非常明显的。

编辑:这是我的 onTouch 代码:

    public boolean  onTouch(View v,MotionEvent event) {

boolean bExitValue = true;
int iAction;

iAction = event.getActionMasked();

if (MotionEvent.ACTION_MOVE == iAction) {
v.setX(event.getRawX());
v.setY(event.getRawY());
}

else if (MotionEvent.ACTION_DOWN != iAction) {
bExitValue = false;
}

return(bExitValue);

}

我尽可能地加强了 onTouch 方法以保持其高效 - 我只使用基元,没有创建任何对象,等等 - 但这没有帮助。我尝试过的其他事情:

  • 将 View 的大小从 100x100 减小到 50x50,从而将必须重绘的像素数减少 75%。没有改善。

  • 覆盖 View.onTouchEvent 而不是注册 onTouchListener。没有改善。

  • 向 list 添加了 android:hardwareAccelerated="true"。没有改善。

  • 这似乎违反直觉,但我尝试在 MotionEvent 处理程序中插入 Thread.sleep(),根据我在网上找到的各种建议这样做的评论。没有改善,但随着 sleep 值的增加,速度肯定会下降!

  • 使用 MotionEvent.getx 和 .getY 而不是“原始”版本。得到看似绝对和相对的交错坐标对,使 View 变得不稳定,所以我暂时放弃了它,但会在解决当前问题后进行研究。

我在新的 Google Nexus 7 上运行我的代码,所以我不认为硬件在吞吐量方面处于饥饿状态。

用手指在屏幕上移动对象是非常基础的。我肯定遗漏了一些东西,因为没有人会在我看到的 react 时间很慢的情况下发布商业代码。

我已经扫描了这里,以及 Google 可以找到的所有内容,但还没有解决方案。在此先感谢您的指导!

最佳答案

你的代码没有问题,我已经实现了简单的拖动并且有与你相同的症状,这是一个与设备相关的问题,每个设备在调用你的触摸时都有自己的延迟。如果您在设备上启用显示触摸(ICS 及更高版本),您会发现它与实际输入相比有点滞后。而且您不是唯一遇到此问题的人。对此有很多讨论。

编辑:如果你真的对此感到困扰,这里有一个建议,这只在高速输入时才明显,尝试测量输入速度,然后预测下一个点在哪里,但这会带来突然变化的问题方向,这个概念需要经过大量思考。

希望这对您有所帮助,祝您工作愉快。

关于Android:使用 onTouch 移动 View 有明显的滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16660485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com