Android仿360悬浮小球自定义view实现示例
2017-03-28 16:33
761 查看
Android仿360悬浮小球自定义view实现示例
效果图如下:
实现当前这种类似的效果 和360小球 悬浮桌面差不错类似。这种效果是如何实现的呢。废话不多说 ,直接上代码。
1.新建工程,添加悬浮窗权限。
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
2.自定义一个FloatMessagerMainWindow
import android.content.Context; import android.graphics.PixelFormat; import android.graphics.Point; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.widget.ImageView; import android.widget.Toast; import com.android.view.FloatMessagePopleDialog; /** * Created by liupanpan on 2017/3/16. */ public class FloatMessagerMainWindow { private Context context; private View view; private WindowManager.LayoutParams mParams = null; private WindowManager windowManager = null; private static FloatMessagerMainWindow floatMessagerMainWindow; public FloatMessagerMainWindow(Context context, View view) { this.context = context; this.view = view; showWindow(context); } public static FloatMessagerMainWindow getFloatMessagerMainWindow(Context context, View view) { if (floatMessagerMainWindow == null) { synchronized (FloatMessagerMainWindow.class) { if (floatMessagerMainWindow == null) { floatMessagerMainWindow = new FloatMessagerMainWindow(context, view); } } } return floatMessagerMainWindow; } private void showWindow(final Context context) { // if (!isWindowDismiss) { // Log.e(TAG, "view is already added here"); // return; // } // isWindowDismiss = false; if (windowManager == null) { windowManager = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE); } Point size = new Point(); windowManager.getDefaultDisplay().getSize(size); int screenWidth = size.x; int screenHeight = size.y; mParams = new WindowManager.LayoutParams(); mParams.packageName = context.getPackageName(); mParams.width = WindowManager.LayoutParams.WRAP_CONTENT; mParams.height = WindowManager.LayoutParams.WRAP_CONTENT; mParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; mParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; // mParams.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | // WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN; mParams.format = PixelFormat.RGBA_8888; mParams.gravity = Gravity.LEFT | Gravity.TOP; mParams.x = screenWidth - dp2px(context, 450); mParams.y = screenHeight - dp2px(context, 550); ImageView imageView = new ImageView(context); imageView.setImageResource(R.mipmap.icon_tab_item_message_pressed); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, "image=========", Toast.LENGTH_SHORT).show(); View view = LayoutInflater.from(context).inflate(R.layout.float_pople_room_layout, null); FloatMessagePopleDialog.getInstance(context, R.style.webviewTheme).setContextView(view); } }); // floatView = new AVCallFloatView(context); // floatView.setParams(mParams); // floatView.setIsShowing(true); windowManager.addView(imageView, mParams); } private int dp2px(Context context, float dp) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dp * scale + 0.1f); } }
调用方法:
FloatMessagerMainWindow.getFloatMessagerMainWindow(context, null);
实现到此 ,点击按钮就可以实现 悬浮窗。(此处可能会出现相应的崩溃,崩溃原因是悬浮窗的 悬浮权限开启问题。)
4.我以官方模拟器为例开启悬浮权限:
打开允许在其他应用上的管理权限
此时再次打开工程,点击按钮,就可以实现悬浮效果。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- Android进阶——自定义View之继承系统控件实现自带删除按钮动画效果和软键盘自动悬浮于文本框下方
- Android编程使用自定义View实现水波进度效果示例
- Android自定义View实现游戏摇杆键盘的方法示例
- Android RecycleView 实现左滑上下分层示例代码(自定义功能)
- Android自定义View实现弹性小球效果
- Android编程基于自定义View实现绚丽的圆形进度条功能示例
- Android view滑动悬浮固定效果实现代码示例
- Android自定义View实现多边形统计图示例代码
- Android利用Paint自定义View实现进度条控件方法示例
- Android自定义圆形View实现小球跟随手指移动效果
- Android开发——自定义View之实现跟随手指移动的小球
- Android编程基于自定义view实现公章效果示例【附源码下载】
- Android中悬浮窗口的实现原理和示例代码
- Android自定义View设定到FrameLayout布局中实现多组件显示
- android自定义view 实现TextView 中文粗体
- android 自定义textView,实现排版对齐和换行
- 在Android中,可以自定义类,继承ViewGroup等容器类,以实现自己需要的布局显示。
- 自定义的View,实现一个跟随手指的小球
- android之自定义ViewGroup和自动换行的布局的实现
- Android自定义View实现HTML图文环绕效果