如何动画现有android视图的"克隆",重复版本

dim*_*suz 6 animation android android-animation

我有一个ImageView坐在a的页面中,ViewPager并且假设我想动画它以缩小+在屏幕外的某处飞行,而原始视图仍然存在于寻呼机中,未受影响.

在Android 4.0.3+上创建此类动画的最佳方法是什么?我想使用新的动画框架,而不是旧的动画框架.

我想到的一种方法是使用活动DecorView:创建ImageView那里的克隆并做动画,但我觉得这有点hacky - 装饰视图看起来更像隐藏的功能和实现细节.

还有更好的方法吗?

Xav*_*ler 2

我认为您可以通过将 的所有父项DecorView设置为 false来绕过使用 a 。这允许您从布局中为 a 制作动画,甚至在其父级(甚至)之外。我主要使用辅助方法来执行此操作:setClipChildren()ImageViewViewActivity

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以只需像这样使用这个方法ImageView

LayoutHelper.setClipView(imageView, false);
Run Code Online (Sandbox Code Playgroud)

要为其View本身设置动画,您应该使用 Android 3.0 中引入的新动画 API(Honeycomb - API 级别 11)。

这个 DevBytes 视频也与此有些相关。它处理自定义Activity动画,并创建一个副本到下一个的ImageView过渡Activity这基本上与您想要做的事情相同,只是在两个不同的Activities.