✎
编程开发网
首页
C语言
C++
面试
Linux
函数
Windows
数据库
下载
搜索
当前位置:
首页
->
AI编程基础
->
c++编程基础
Launcher知识的demo,手机管家小伙家与悬浮窗(三)
2015-07-20 17:30:30
·
作者:
·
浏览:
33
标签:
Launcher
知识
demo
手机
管家
小伙
悬浮
发射小火箭 launchRocket(); }else{ updateStatus(); //判断点击事件 if(mXDownInScreen==mXInScreen&&mYDownInScreen==mYInScreen){ //打开big openBigWindow(); } } break; default: break; } return true; } /** * 发射小火箭 */ private void launchRocket() { MyWindowManager.removeRocketWindow(getContext()); new LuanchTask().execute(); } private class LuanchTask extends AsyncTask
{ @Override protected Void doInBackground(Void... params) { while(mParams.y>0){ mParams.y=mParams.y-10; publishProgress(); SystemClock.sleep(8); } return null; } @Override protected void onProgressUpdate(Void... values) { //根据进度更新小火箭的位置,实现发射效果 mWindowManager.updateViewLayout(SmallView.this, mParams); } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); // 火箭升空结束后,回归到悬浮窗状态 updateStatus(); mParams.x = (int) (mXDownInScreen - mXInView); mParams.y = (int) (mYDownInScreen - mYInView); mWindowManager.updateViewLayout(SmallView.this, mParams); } } /** * 更改小火箭的状态 */ private void updateStatus() { //如果是按下的状态,而且小火箭是不存在的,则显示小火箭,隐藏悬浮框 if(isPressed&&mIvRocket.getVisibility()!=View.VISIBLE){ mParams.width=rocketWidth; mParams.height=rocketHeight; mWindowManager.updateViewLayout(this, mParams); view.setVisibility(View.GONE); mIvRocket.setVisibility(View.VISIBLE); MyWindowManager.createRocketWindow(getContext()); }else if(!isPressed){ //显示悬浮框,隐藏小火箭 mParams.width=viewWidth; mParams.height=viewHeight; mWindowManager.updateViewLayout(this, mParams); view.setVisibility(View.VISIBLE); mIvRocket.setVisibility(View.GONE); MyWindowManager.removeRocketWindow(getContext()); } } /** * 打开大悬浮窗,同时关闭小悬浮窗。 */ private void openBigWindow() { MyWindowManager.createBigView(getContext()); MyWindowManager.removeSmallWindow(getContext()); } /** * 移动samll在屏幕上的位置 */ private void updateView() { mParams.x=(int) (mXInScreen-mXInView); mParams.y=(int) (mYInScreen-mYInView); mWindowManager.updateViewLayout(this, mParams); MyWindowManager.updateLauncher(); } /** * 获得状态栏的高度 * * @return */ private float getStatusBarHeight() { if (statusBarHeight == 0) { try { Class
clazz = Class.forName("com.android.internal.R$dimen"); Object o = clazz.newInstance(); Field field = clazz.getField("status_bar_height"); Integer size = (Integer) field.get(o); statusBarHeight = getResources().getDimensionPixelSize(size); } catch (Exception e) { e.printStackTrace(); } } return statusBarHeight; } }
效果图
源码地址:点击打开链接
首页
上一页
1
2
3
4
5
6
下一页
尾页
3
/6/6