我有一个 ImageView
位于 ViewPager
的页面中,假设我想为其设置动画以按比例缩小 + 飞到屏幕外的某个地方,而原始 View 仍然存在于寻呼机中,未改变。
在 Android 4.0.3+ 上创建此类动画的最佳方法是什么? 我想使用新的动画框架,而不是旧的。
我想到的一种方法是使用 Activity 的 DecorView
:在那里创建 ImageView
的克隆并制作动画,但我觉得这有点 hacky -装饰 View 看起来更像是一个隐藏的功能和一个实现细节。
有没有更好的方法?
最佳答案
我认为您可以通过在 ImageView
的所有父级上将 setClipChildren()
设置为 false 来绕过使用 DecorView
。这允许您从布局中为 View
设置动画,甚至在其父级(甚至是 Activity
)之外。我主要使用辅助方法来执行此操作:
public static void setClipView(View view, boolean clip) {
if (view != null) {
ViewParent parent = view.getParent();
if(parent instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) view.getParent();
viewGroup.setClipChildren(clip);
setClipView(viewGroup, clip);
}
}
}
所以只需在您的 ImageView
上使用此方法,如下所示:
LayoutHelper.setClipView(imageView, false);
要为 View
本身设置动画,您应该使用 Android 3.0(Honeycomb - API 级别 11)引入的新动画 API。
This DevBytes video也与此有些关系。它处理自定义 Activity
动画,它们创建一个重复的 ImageView
来动画从一个 Activity
到下一个的过渡。这基本上与您尝试做的相同,只是在两个不同的 Activities
中。
关于android - 如何为 'cloned' 制作动画,现有 android View 的重复版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25569621/