Android实现桌面悬浮小火箭效果
本文实例为大家分享了Android实现悬浮小火箭效果的具体代码,供大家参考,具体内容如下
思路
使用serivce在后台启动小火箭
小火箭使用windowmanager实现。
用ontoch监听实现小火箭的拖拽。
代码实现
publicclassRocketServiceextendsService{ privateWindowManagermWM; privateViewview; privateintstartX; privateintstartY; privateLayoutParamsparams; @Override publicIBinderonBind(Intentintent){ returnnull; } @Override publicvoidonCreate(){ super.onCreate(); System.out.println("服务创建。。。。"); mWM=(WindowManager)getSystemService(WINDOW_SERVICE); winWidth=mWM.getDefaultDisplay().getWidth(); winHeight=mWM.getDefaultDisplay().getHeight(); params=newWindowManager.LayoutParams(); 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.TRANSLUCENT; params.type=WindowManager.LayoutParams.TYPE_PHONE; params.gravity=Gravity.LEFT+Gravity.TOP; view=LayoutInflater.from(this).inflate(R.layout.rocket,null); //拿到imageview,设置帧动画 ImageViewivRocket=(ImageView)view.findViewById(R.id.rocket); ivRocket.setImageResource(R.drawable.rocket); AnimationDrawabledrawable=(AnimationDrawable)ivRocket.getDrawable(); drawable.start(); mWM.addView(view,params); //设置view的触摸事件,让它可以被拖拽 view.setOnTouchListener(newOnTouchListener(){ @Override publicbooleanonTouch(Viewv,MotionEventevent){ switch(event.getAction()){ caseMotionEvent.ACTION_DOWN: startX=(int)event.getRawX(); startY=(int)event.getRawY(); break; caseMotionEvent.ACTION_MOVE: intdx=(int)(event.getRawX()-startX); intdy=(int)(event.getRawY()-startY); //更新浮窗位置 params.x+=dx; params.y+=dy; //限制窗口坐标不超过屏幕 if(params.x<0){ params.x=0; } if(params.x>winWidth-view.getWidth()){ params.x=winWidth-view.getWidth(); } if(params.y<0){ params.y=0; } if(params.y>winHeight-view.getHeight()){ params.y=winHeight-view.getHeight(); } mWM.updateViewLayout(view,params); startX=(int)event.getRawX(); startY=(int)event.getRawY(); break; caseMotionEvent.ACTION_UP: //手指抬起起,需要发射火箭,限定发射火箭的范围 if(params.x>0&¶ms.xwinHeight-500){ sendRocket(); } break; } returntrue;//不再把事件传递给onClick处理 } }); } privateHandlermHandler=newHandler(){ @Override publicvoidhandleMessage(Messagemsg){ inty=msg.arg1; params.y=y; mWM.updateViewLayout(view,params); } }; privateintwinWidth; privateintwinHeight; //发射火箭 privatevoidsendRocket(){ //用子线程更新y轴 newThread(newRunnable(){ @Override publicvoidrun(){ intpos=1000; for(inti=0;i<=10;i++){ inty=pos-100*i; //休眠100ms发消息 try{ Thread.sleep(100); }catch(InterruptedExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } Messagemsg=Message.obtain(); msg.arg1=y; mHandler.sendMessage(msg); } } }).start(); } @Override publicvoidonDestroy(){ //TODOAuto-generatedmethodstub super.onDestroy(); if(mWM!=null&&view!=null){ mWM.removeView(view); view=null; } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。