发射小火箭
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;
}
}
效果图
源码地址:点击打开链接
|