Launcher知识的demo,手机管家小伙家与悬浮窗(三)

2015-07-20 17:30:30 · 作者: · 浏览: 33
发射小火箭 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; } }


效果图

n块エky源码地址:点击打开链接