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;
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。