`

android 悬浮窗特效

 
阅读更多

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

 

一开始考虑用自定义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%正好是下面三个标签的中间位置

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics