欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android 悬浮窗特效 博客分类: android  

程序员文章站 2024-03-11 21:32:49
...

最近在开发项目的时候需要做一个悬浮层的动画,类似于支付宝掉钱动画。但是区别在于,需求是浮出一个窗口,之后边缩放边位移至屏幕右下角标签处。效果图如下:

 

一开始考虑用自定义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总行了吧。

 

<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%正好是下面三个标签的中间位置