如何在不使用动画(android.view.animation.*
)的情况下以编程方式转换任意 View ?
API 11引入了setTranslationX
和setTranslationY
,setX
和setY
以及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 可以超出其自身的边界绘制。