安卓自定义缩放动画性能差

4

我有一个比较具体的问题,但希望有人能参与并提供帮助。

我编写了一个自定义缩放动画(使用runnable在一定时间内更改目标视图到处理程序),但当我更改视图的宽度和高度时,就好像我在视图的(0,0)周围执行了缩放,而我想要以其中心为中心进行缩放,因此我通过相应地更改其边距来移动视图。然而,当缩放迭代步骤太小(即0.01f及以下)时,有时必须仅在一个方向上将视图的边距更改1px之类的东西,这使得动画看起来像是有故障。我不确定确切的原因,但我尝试了以下几件事:

1)我尝试通过覆盖父视图的onLayout()方法来更改边距,这将在缩放时调用(我这样做是为了避免第二次调用setLayoutParams()时移动,实际上现在看起来不太合理,因为setLayoutParams()只是设置一些标志,稍后将使用它们)。

2)我正在检查要设置的新边距,以便仅在X和Y两个方向上的新旧边距之间存在差异时才设置它们。

3)我尝试使用view.offsetLeftAndRight()和view.offsetTopAndBottom()来移动视图,而不是更改布局参数,但这也无济于事。

有什么建议可以解决问题吗?


你选择将Runnables发布到Handler而不是在XML中编写动画,有什么特殊的原因吗? - user766650
1个回答

1

如果我理解正确,您需要从视图中获取位图缓存并手动绘制它。在这种情况下,如果启用了位图过滤,则位图将不会出现故障。

您可以按照以下步骤执行:

  1. 获取视图缓存 - 通过View.getDrawingCache或调用View.draw函数
  2. 隐藏视图
  3. 获取当前系统时间 - SystemClock.elapsedRealtime(感谢此功能,您可以计算动画进度)
  4. 开始发布可运行项以使屏幕无效,并检查动画是否已结束
  5. 显示视图

可能可以通过Android Animation类完成,但我不使用它,因为它相当有限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接