Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现

本文介绍了如何在Android中模仿QQ手机管家的小火箭加速功能,通过创建桌面悬浮窗并在用户拖动时显示火箭升空动画。详细讲解了从火箭发射台布局到拖动检测、动画实现的整个过程,包括创建、更新和移除火箭发射台悬浮窗的方法。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

               

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/16919859


今天是2013年的最后一天了,这里首先提前祝大家新年快乐!同时,本篇文章也是我今年的最后一篇文章了,因此我想要让它尽量有点特殊性,比起平时的文章要多一些特色。记得在今年年初的时候,我写的第一篇文章是模仿360手机卫士的桌面悬浮窗效果,那么为了能够首尾呼应,今年的最后一篇文章就同样还是来实现桌面悬浮窗的效果吧,当然效果将会更加高级。


相信用过QQ手机管家的朋友们都会知道它有一个小火箭加速的功能,将小火箭拖动到火箭发射台上发射就会出现一个火箭升空的动画,那么今天我们就来模仿着实现一下这个效果吧。


这次我们将代码的重点放在火箭升空的效果上,因此简单起见,就直接在模仿360手机卫士悬浮窗的那份代码的基础上继续开发了,如果你还没有看过那篇文章的话,建议先去阅读 Android桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果 。


比起普通的桌面悬浮窗,现在我们需要在拖动悬浮窗的时候将悬浮窗变成一个小火箭,并且在屏幕的底部添加一个火箭发射台。那么我们就从火箭发射台开始编写吧,首先创建launcher.xml作为火箭发射台的布局文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"    >        <ImageView         android:id="@+id/launcher_img"        android:layout_width="200dp"        android:layout_height="88dp"        android:src="@drawable/launcher_bg_hold"        />    </LinearLayout>

可以看到,这里的ImageView是用于显示当前火箭发射台状态的。我事先准备好了两张图片,一张是当小火箭未拖动到火箭发射台时显示的,一张是当小火箭拖动到火箭发射台上时显示的。


接下来创建RocketLauncher类,作为火箭发射台的View,代码如下所示:

public class RocketLauncher extends LinearLayout /**  * 记录火箭发射台的宽度  */ public static int width; /**  * 记录火箭发射台的高度  */ public static int height; /**  * 火箭发射台的背景图片  */ private ImageView launcherImg; public RocketLauncher(Context context) {  super(context);  LayoutInflater.from(context).inflate(R.layout.launcher, this);  launcherImg = (ImageView) findViewById(R.id.launcher_img);  width = launcherImg.getLayoutParams().width;  height = launcherImg.getLayoutParams().height; } /**  * 更新火箭发射台的显示状态。如果小火箭被拖到火箭发射台上,就显示发射。  */ public void updateLauncherStatus(boolean isReadyToLaunch) {  if (isReadyToLaunch) {   launcherImg.setImageResource(R.drawable.launcher_bg_fire);  } else {   launcherImg.setImageResource(R.drawable.launcher_bg_hold);  } }}

RocketLauncher中的代码还是非常简单的,在构建方法中调用了LayoutInflater的inflate()方法来将launcher.xml这个布局文件加载进来,并获取到了当前View的宽度和高度。在updateLauncherStatus()方法中会进行判断,如果传入的参数是true,就显示小火箭即将发射的图片,如果传入的是false,就显示将小火箭拖动到发射台的图片。


新增的文件只有这两个,剩下的就是要修改之前的代码了。首先修改MyWindowManager中的代码,如下所示:

public class MyWindowManager /**  * 小悬浮窗View的实例  */ private static FloatWindowSmallView smallWindow; /**  * 大悬浮窗View的实例  */ private static FloatWindowBigView bigWindow; /**  * 火箭发射台的实例  */ private static RocketLauncher rocketLauncher; /**  * 小悬浮窗View的参数  */ private static LayoutParams smallWindowParams; /**  * 大悬浮窗View的参数  */ private static LayoutParams bigWindowParams; /**  * 火箭发射台的参数  */ private static LayoutParams launcherParams; /**  * 用于控制在屏幕上添加或移除悬浮窗  */ private static WindowManager mWindowManager; /**  * 用于获取手机可用内存  */ private static ActivityManager mActivityManager; /**  * 创建一个小悬浮窗。初始位置为屏幕的右部中间位置。  */ 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值