android - 为什么在缩放手势期间调用 setScaleX 会导致闪烁?

标签 android performance android-ui hardware-acceleration

我正在尝试创建一个可缩放的容器,我的目标是 API 14+

在我的 onScale 中(我正在使用 ScaleGestureDetector 来检测捏合缩放)我正在做这样的事情:

public boolean onScale (ScaleGestureDetector detector) {
   float scaleFactor = detector.getScaleFactor();
   setScaleX(getScaleX() * scaleFactor);
   setScaleY(getScaleY() * scaleFactor);

   return true;
};

可以,但缩放不流畅。事实上,它明显闪烁。

我还尝试了硬件层,认为一旦上传纹理,缩放就会在 GPU 上发生,因此速度会非常快。但这没有任何区别 - 缩放不平滑并且有时会奇怪地闪烁。

我做错了什么?

最佳答案

闪烁看起来像 View 在缩放和未缩放之间来回翻转吗?这是由于 ScaleGestureDetector 从您正在缩放的​​同一 View 处理运动事件造成的。当您 setScaleX() 更改触摸坐标时,会触发一个新的触摸事件,该事件被解释为反转您刚刚应用的缩放。

将可缩放 View 的内容放入单个子 FrameLayout 中,并改为在该 View 上设置比例。

我在这里发布了一个可用的缩放布局:https://gist.github.com/anorth/9845602

关于android - 为什么在缩放手势期间调用 setScaleX 会导致闪烁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17395601/

相关文章:

android - 如何在通知中添加声音?

android - 无法将 APK 上传到 Google Play

performance - c++,cin 有问题吗?

java - REST 调用减慢了 Spring Boot 应用程序的速度 - 需要改进性能

android - 将 Android 应用程序转换为 BlackBerry 平台时的 UI 问题

android - 创建自定义 View

adb - Keyevent 点击 Android 屏幕的 Alert Dialog

android - “org.json.JSONException: End of input at character 0 of ”

android - Google Play 商店的 RSS 提要

python - 使用 scipy 最小化二参数函数时的性能问题