diff --git a/FloatViewFinal-Sample.apk b/FloatViewFinal-Sample.apk index f60b371..b0dd03f 100644 Binary files a/FloatViewFinal-Sample.apk and b/FloatViewFinal-Sample.apk differ diff --git a/README.md b/README.md index 2f203fa..ef269dd 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,8 @@ # FloatViewFinal简介 泡椒网游戏SDK Float View(悬浮窗)实现 +(兼容MIUI系统) -* 无需任何权限 -* 兼容MIUI系统 - -关于Android无需权限显示悬浮窗,请【[点击](http://www.jianshu.com/p/167fd5f47d5c)】 +关于悬浮窗更详细资料,请【[点击](http://www.jianshu.com/p/167fd5f47d5c)】 DEMO apk文件【[下载](https://raw.githubusercontent.com/pengjianbo/FloatViewFinal/master/FloatViewFinal-Sample.apk)】 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b47315c..c874690 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,6 +18,9 @@ + + + mService; - - FloatViewServiceBinder(FloatViewService service) { - mService = new WeakReference<>(service); - } + @Override + public void onDestroy() { + super.onDestroy(); + destroyFloat(); + } + public class FloatViewServiceBinder extends Binder { public FloatViewService getService() { - return mService.get(); + return FloatViewService.this; } } } diff --git a/app/src/main/java/cn/finalteam/floatviewfinal/widget/FloatView.java b/app/src/main/java/cn/finalteam/floatviewfinal/widget/FloatView.java index 4129bfa..146f6b8 100644 --- a/app/src/main/java/cn/finalteam/floatviewfinal/widget/FloatView.java +++ b/app/src/main/java/cn/finalteam/floatviewfinal/widget/FloatView.java @@ -55,7 +55,7 @@ public class FloatView extends FrameLayout implements OnTouchListener { private WindowManager mWindowManager; private Context mContext; - private View mRootFloatView; + //private View mRootFloatView; private ImageView mIvFloatLogo; private ImageView mIvFloatLoader; private LinearLayout mLlFloatMenu; @@ -142,7 +142,6 @@ private void init(Context mContext) { mWindowManager.addView(this, mWmParams); mTimer = new Timer(); - hide(); } @@ -189,16 +188,16 @@ protected void onConfigurationChanged(Configuration newConfig) { private View createView(final Context context) { LayoutInflater inflater = LayoutInflater.from(context); // 从布局文件获取浮动窗口视图 - mRootFloatView = inflater.inflate(ResourceUtils.getLayoutId(context, "pj_widget_float_view"), null); - mFlFloatLogo = (FrameLayout) mRootFloatView.findViewById(ResourceUtils.getId(context, "pj_float_view")); + View rootFloatView = inflater.inflate(ResourceUtils.getLayoutId(context, "pj_widget_float_view"), null); + mFlFloatLogo = (FrameLayout) rootFloatView.findViewById(ResourceUtils.getId(context, "pj_float_view")); - mIvFloatLogo = (ImageView) mRootFloatView.findViewById(ResourceUtils.getId(context, + mIvFloatLogo = (ImageView) rootFloatView.findViewById(ResourceUtils.getId(context, "pj_float_view_icon_imageView")); - mIvFloatLoader = (ImageView) mRootFloatView.findViewById(ResourceUtils.getId( + mIvFloatLoader = (ImageView) rootFloatView.findViewById(ResourceUtils.getId( context, "pj_float_view_icon_notify")); - mLlFloatMenu = (LinearLayout) mRootFloatView.findViewById(ResourceUtils.getId( + mLlFloatMenu = (LinearLayout) rootFloatView.findViewById(ResourceUtils.getId( context, "ll_menu")); - mTvAccount = (TextView) mRootFloatView.findViewById(ResourceUtils.getId( + mTvAccount = (TextView) rootFloatView.findViewById(ResourceUtils.getId( context, "tv_account")); mTvAccount.setOnClickListener(new OnClickListener() { @Override @@ -207,7 +206,7 @@ public void onClick(View arg0) { openUserCenter(); } }); - mTvFeedback = (TextView) mRootFloatView.findViewById(ResourceUtils.getId( + mTvFeedback = (TextView) rootFloatView.findViewById(ResourceUtils.getId( context, "tv_feedback")); mTvFeedback.setOnClickListener(new OnClickListener() { @Override @@ -216,8 +215,8 @@ public void onClick(View arg0) { mLlFloatMenu.setVisibility(View.GONE); } }); - mRootFloatView.setOnTouchListener(this); - mRootFloatView.setOnClickListener(new OnClickListener() { + rootFloatView.setOnTouchListener(this); + rootFloatView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if ( !mDraging ) { @@ -229,12 +228,12 @@ public void onClick(View v) { } } }); - mRootFloatView.measure(View.MeasureSpec.makeMeasureSpec(0, + rootFloatView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec .makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); - return mRootFloatView; + return rootFloatView; } @Override @@ -251,7 +250,7 @@ public boolean onTouch(View v, MotionEvent event) { mIvFloatLogo.setImageResource(ResourceUtils.getDrawableId( mContext, "pj_image_float_logo")); mWmParams.alpha = 1f; - mWindowManager.updateViewLayout(FloatView.this, mWmParams); + mWindowManager.updateViewLayout(this, mWmParams); mDraging = false; break; case MotionEvent.ACTION_MOVE: @@ -301,10 +300,9 @@ private void removeTimerTask() { private void removeFloatView() { try { - if (mRootFloatView != null) { - mWindowManager.removeView(mRootFloatView); - } + mWindowManager.removeView(this); } catch (Exception ex) { + ex.printStackTrace(); } } @@ -312,24 +310,27 @@ private void removeFloatView() { * 隐藏悬浮窗 */ public void hide() { - if (mRootFloatView != null) { - mRootFloatView.setVisibility(View.GONE); - removeTimerTask(); - } + setVisibility(View.GONE); + Message message = mTimerHandler.obtainMessage(); + message.what = HANDLER_TYPE_HIDE_LOGO; + mTimerHandler.sendMessage(message); + removeTimerTask(); } /** * 显示悬浮窗 */ public void show() { - if (mRootFloatView != null) { - mIvFloatLogo.setImageResource(ResourceUtils.getDrawableId( - mContext, "pj_image_float_logo")); - mWmParams.alpha = 1f; - mWindowManager.updateViewLayout(FloatView.this, mWmParams); - mRootFloatView.setVisibility(View.VISIBLE); - timerForHide(); + if (getVisibility() != View.VISIBLE) { + setVisibility(View.VISIBLE); if (mShowLoader) { + mIvFloatLogo.setImageResource(ResourceUtils.getDrawableId( + mContext, "pj_image_float_logo")); + mWmParams.alpha = 1f; + mWindowManager.updateViewLayout(this, mWmParams); + + timerForHide(); + mShowLoader = false; Animation rotaAnimation = AnimationUtils.loadAnimation(mContext, ResourceUtils.getAnimId(mContext, "pj_loading_anim"));