Android桌面小火箭
来源:互联网 发布:it技术博客 编辑:程序博客网 时间:2024/06/05 10:06
介绍
1.主Activity只有两个Button,一个开启服务一个关闭服务。
2.在服务中获取窗体对象,并将View图片加载到窗体上。
3.Touch事件的响应
4.动画设置
开启显示火箭的Service
public class RocketService extends Service { @Nullable WindowManager mWindowManager ; View mRocketView; private int mScreenWidth; private int mScreenHeight; private WindowManager.LayoutParams params; /** * handler拿到高度后更新窗体和View */ private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); params.y = (int) msg.obj; mWindowManager.updateViewLayout(mRocketView,params ); } }; private final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(); @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { showRocket(); super.onCreate(); } /** * 获取窗体信息,初始化LayoutParams */ private void showRocket() { mWindowManager = (WindowManager)getSystemService(WINDOW_SERVICE); mScreenWidth = mWindowManager.getDefaultDisplay().getWidth(); mScreenHeight = mWindowManager.getDefaultDisplay().getHeight(); params = mParams; params.height = WindowManager.LayoutParams.WRAP_CONTENT; params.width = WindowManager.LayoutParams.WRAP_CONTENT; params.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; params.format = PixelFormat.TRANSPARENT; params.type = WindowManager.LayoutParams.TYPE_PHONE; params.setTitle("Toast"); params.gravity = Gravity.LEFT+Gravity.TOP;//默认小火箭在左上角 //定义火箭加载到窗体 mRocketView= View.inflate(this,R.layout.rocket_view,null); ImageView rocketImage = (ImageView)mRocketView.findViewById(R.id.iv_rocket); //动画是两张图片互相切换实现的 AnimationDrawable background= (AnimationDrawable) rocketImage.getBackground(); background.start(); //将View添加到窗体 mWindowManager.addView(mRocketView,params); mRocketView.setOnTouchListener(new View.OnTouchListener() { private int startX; private int startY; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: startX = (int)event.getRawX(); startY=(int)event.getRawY(); break; case MotionEvent.ACTION_MOVE: Log.i("touch event move","move"); int moveX = (int)event.getRawX(); int moveY =(int)event.getRawY(); int disX = moveX-startX;//得到距离 int disY = moveY-startY; params.x = params.x+disX; params.y = params.y+disY; /* if(params.x<0){ params.x=0; } if(params.y<0){ params.y=0; }*/ mWindowManager.updateViewLayout(mRocketView,params); startX = (int)event.getRawX(); startY = (int)event.getRawY(); break; case MotionEvent.ACTION_UP: //手指在某一块区域释放时小火箭升空 if(params.x>100&¶ms.x<200&¶ms.y>350){ sendRocket(); Intent intent = new Intent(getApplicationContext(),BackGround.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//因为是Service启动Activity,需要将Activity放入栈中 startActivity(intent); } break; } return true; } }); } /** * 开启一个线程对耗时操作进行处理 * 通过消息机制将Y轴的高度发给Handler */ private void sendRocket() { new Thread(){ @Override public void run() { super.run(); for(int i=0;i<11;i++){ int height = 350-i*35; try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } Message message = Message.obtain(); message.obj = height; handler.sendMessage(message); } } }.start(); } @Override public void onDestroy() { if(mWindowManager!=null&&mRocketView!=null){ mWindowManager.removeView(mRocketView); } super.onDestroy(); }}
小火箭ImageView的background设置
<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/desktop_rocket_launch_1" android:duration="200"/> <item android:drawable="@drawable/desktop_rocket_launch_2" android:duration="200"/></animation-list>
其实就是一个动画List不断切换两张图片
烟雾所在Activity设置成透明
<activity android:name=".BackGround" android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
Github源码下载
0 0
- Android桌面小火箭
- Android桌面悬浮窗小火箭效果实现
- 桌面小火箭的实现逻辑
- 桌面悬浮小火箭的实现
- Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现
- Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现
- Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现
- Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现
- Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现
- Android桌面悬浮窗进阶---QQ手机管家小火箭效果实现
- Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现
- Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现
- Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现
- Android 桌面悬浮窗进阶,QQ手机管家小火箭效果实现
- Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现
- Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现
- Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现
- Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现
- Android中的坐标系以及获取坐标的方法
- netbeans IDE 配置php开发环境
- ViewPager在大数量的Item的时候出现的滑动异常的问题
- idea debug部署项目,没有任何异常,一直处在部署中
- sql语句二
- Android桌面小火箭
- String 与 StringBuffer 、StringBulider 的区别
- Python 多线程详解
- 物好价就不能低了吗?网购狂欢盛宴一去不返?
- 第28课:使用提交按钮,提交数据
- 收藏几个算法学习网站
- 用备份进行Active Directory的灾难重建:Active Directory系列之三
- cookie与HTML5的localStorage和sessionStorage
- windows下初始化格式化磁盘