如何在不使用动画(android.view.animation.*)的情况下以编程方式转换任意 View ?

API 11引入了setTranslationXsetTranslationYsetXsetY以及getMatrix,所有这些都可以用来完成我正在寻找的东西。但是,我似乎找不到以前的API级别的等效项。
android.view.animation.TranslateAnimation在其实现中使用getMatrix(可追溯到API 4),但在整个过程中它都是私有(private)API。

有什么方法可以不依靠反射(reflection)来做到这一点吗?

最佳答案

很喜欢,因为我很想在这个问题上被证明是错误的,但是不久前我进行一些“拖拽”调查时遇到了类似的问题。

我敢肯定,您对offsetTopAndBottom()offsetLeftAndRight()感到困惑,因为它们在早期API中没有动画的情况下就可以移动View。这里最大的缺点是这些方法实际上修改了top / bottom / left / right值,因此,如果要返回到起点,则必须进行一些非常繁琐的跟踪。

另一种选择是仅使用持续时间非常短的TranslateAnimation并将其设置为fillAfter ...

其他选项需要子类化,但仍然不是很漂亮,例如翻译Canvas绘制的View。这里的问题是,您还必须创建一个不会裁剪其子级的父级,以便 View 可以超出其自身的边界绘制。

07-24 19:13
查看更多