最近在开发项目的时候需要做一个悬浮层的动画,类似于支付宝掉钱动画。但是区别在于,需求是浮出一个窗口,之后边缩放边位移至屏幕右下角标签处。效果图如下:
一开始考虑用自定义View来做。后来发现开线程让其移动很卡,ListView+动画也没法精确定位到目标点。
后来想利用Dialog的dismiss动画来完成。
自定义一个Dialog后,在style文件中定义两个style,一个样式,一个动画
style文件:
<style name="DialogAnimation" parent="@android:style/Animation.Dialog">
<item name="android:windowEnterAnimation">@anim/dialog_show</item>
<item name="@android:windowExitAnimation">@anim/dialog_dismiss</item>
</style>
<style name="Translucent_NoTitle" parent="android:style/Theme.Dialog">
<item name="android:background">">@android:color/transparent</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
</style>
getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
后来发现也很卡,不知什么原因。
最后用半透明Activity总行了吧。
android:name = ".GoldActivity"
android:theme = "@android:style/Theme.Translucent.NoTitleBar" >
</ activity >
缩放加平移动画:(取巧实现,scale和translate同时使用会没法控制移动位置)
<scale android:duration="1000" android:fillAfter="true" android:fromXScale="100%" android:fromYScale="100%" android:interpolator="@anim/gold_accelerate_interpolator" android:pivotX="87%" android:pivotY="100%" android:toXScale="10%" android:toYScale="10%"/>
其中87%正好是下面三个标签的中间位置