【Anroid界面实现】WindowManager类使用具体解释——用户首次打开APP的使用教学蒙板效果实现
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992
在上一篇的文章中,我们介绍了怎样实现桌面悬浮窗体,在这个效果的实现过程中。最重要的一个类就是WindowManager。今天这篇文章,将对WindowManager的使用进行介绍。而且实现一个使用WindowManager来实现用户打开APP,显示首次使用教学蒙板的效果。
WindowManager类实现了ViewManager接口,ViewManager接口同意我们在Activity上加入或者是移除view,因此WindowManager也同意我们在Activity上进行View的加入和移除操作。
我们能够通过以下的方法获取一个WindowManager对象
Context.getSystemService(Context.WINDOW_SERVICE)
在Activity之中,我们能够直接通过getWindowManager()获取到一个WindowManager对象。
每个WindowManager实例都被绑定到一个独有的Display对象上面。假设我们想获取不同Display的WindowManager对象,我们能够通过createDisplayContext(Display)获取到这个Display的Context对象。然后使用上面的方法。也能够获取到一个WindowManager对象。
我们在使用WindowManager类的时候,通常使用以下的几个方法:
windowManager.addView(View,WindowManager.LayoutParam);
windowManager.removeView();
windowManager.getDefaultDisplay();
windowManager.addView()方法用来向当前的窗体上加入View对象。须要接受两个參数,View是要加入到窗体的View对象,而WindowManager.LayoutParam则是加入的窗体的參数,在上一篇加入悬浮窗的操作的时候,须要对LayoutParam设置非常多參数。以下我们看一下经常使用的设置
// 设置LayoutParams參数 LayoutParams params = new WindowManager.LayoutParams(); //设置显示的类型。TYPE_PHONE指的是来电话的时候会被覆盖,其它时候会在最前端。显示位置在stateBar以下,其它很多其它的值请查阅文档 params.type = WindowManager.LayoutParams.TYPE_PHONE; //设置显示格式 params.format = PixelFormat.RGBA_8888; //设置对齐方式 params.gravity = Gravity.LEFT | Gravity.TOP; //设置宽高 params.width = ScreenUtils.getScreenWidth(this); params.height = ScreenUtils.getScreenHeight(this); //设置显示的位置 params.x; params.y;
设置好LayoutParam之后,我们就能够通过windowManager.addView(View,WindowManager.LayoutParam)将View加入到窗体之上,只是,我们须要申明权限
<uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW"/>
加入完毕之后,我们就能够在窗体上看到我们加入的View对象了。假设我们想将加入的View移除,我们仅仅须要调用windowManager.removeView()就可以,參数就是我们前面使用的View对象。使用非常easy。除了这种方法。还有个windowManager.removeViewImmediate(),也能够将View移除,可是文档中说,这种方法并非给一般程序调用的,因此须要小心使用,我们开发的都属于一般程序,建议不要使用这种方法。
除了这两个方法之外,我们最经常使用的另外一个方法就是windowManager.getDefaultDisplay(),通过这种方法,我们能够获取到当前界面的Display的一个对象。然后我们就能够获取到当前屏幕的一些參数。比方说宽高。
以下是我经常使用的一个工具类。
package com.qust.teachmask;
import android.content.Context;
import android.view.WindowManager;
/**
* 屏幕帮助类
*
* @author zhaokaiqiang
*
*/
public class ScreenUtils {
/**
* 获取屏幕宽度
*
* @return
*/
@SuppressWarnings("deprecation")
public static int getScreenWidth(Context context) {
return ((WindowManager) context
.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
.getWidth();
}
/**
* 获取屏幕宽度
*
* @return
*/
@SuppressWarnings("deprecation")
public static int getScreenHeight(Context context) {
return ((WindowManager) context
.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
.getHeight();
}
}
知道上面这些之后,我们就能够实现教学模板效果了。首先看效果图。
以下是代码实现
package com.qust.teachmask;
import android.app.Activity;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
public class MainActivity extends Activity {
private ImageView img;
private WindowManager windowManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
windowManager = getWindowManager();
// 动态初始化图层
img = new ImageView(this);
img.setLayoutParams(new LayoutParams(
android.view.ViewGroup.LayoutParams.MATCH_PARENT,
android.view.ViewGroup.LayoutParams.MATCH_PARENT));
img.setScaleType(ScaleType.FIT_XY);
img.setImageResource(R.drawable.guide);
// 设置LayoutParams參数
LayoutParams params = new WindowManager.LayoutParams();
// 设置显示的类型,TYPE_PHONE指的是来电话的时候会被覆盖,其它时候会在最前端,显示位置在stateBar以下,其它很多其它的值请查阅文档
params.type = WindowManager.LayoutParams.TYPE_PHONE;
// 设置显示格式
params.format = PixelFormat.RGBA_8888;
// 设置对齐方式
params.gravity = Gravity.LEFT | Gravity.TOP;
// 设置宽高
params.width = ScreenUtils.getScreenWidth(this);
params.height = ScreenUtils.getScreenHeight(this);
// 加入到当前的窗体上
windowManager.addView(img, params);
// 点击图层之后。将图层移除
img.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
windowManager.removeView(img);
}
});
}
}
github项目地址:https://github.com/ZhaoKaiQiang/TeachMask
浙公网安备 33010602011771号