我正在尝试创建一个可缩放的容器,我的目标是 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/