目前涉及的交互窗口Activity、 Dialog
WindowManager窗口管理器
可以完成窗口的显示、 更新、 销毁的处理
获取窗口管理器对象.
private WindowManager wm;
...
//获取对象
wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
初始化窗口的显示效果, 需要依赖于WindowManager.LayoutParams
//窗口配置参数
private WindowManager.LayoutParams lp;
...
lp = new WindowManager.LayoutParams();
配置窗口显示效果
//配置窗口的显示类型
lp.type = WindowManager.LayoutParams.TYPE_APPLICATION;
//透明背景(透明)
lp.format = PixelFormat.TRANSPARENT;
//配置窗口的特性,FLAG_NOT_TOUCH_MODAL不可触摸不影响后面的事件的响应, FLAG_NOT_FOCUSABLE不获取焦点
lp.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
//窗口的显示位置
lp.gravity = Gravity.CENTER;
// lp.x = 200;
// lp.y = 300;
lp.width = 300;
lp.height = 200;
显示窗口布局
wm.addView(windowLayout, lp);
更新窗口效果
int x = lp.x+10;
int y = lp.y +20;
lp.x = x;
lp.y = y;
wm.updateViewLayout(windowLayout,lp);
移除窗口
wm.removeView(windowLayout);
系统类型的弹框
lp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
需要的权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
窗口如果要加上硬件加速需要在flag中添加WindowManager.LayoutParams.FLAGHARDWAREACCELERATED
lp.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
SensorManager传感器
传感器管理器主要可以监听设备上的加速度、 温度、 光感、 方向、 磁力、 陀螺仪、 压力、 温度、 重力等等传感器信息
1、 获取传感器管理器
private SensorManager sensorManager;
...
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
2、 定义传感器监听器
private SensorEventListener sensorEventListener = new SensorEventListener() {
//传感器数据发生变化
@Override
public void onSensorChanged(SensorEvent event) {
//针对重力加速度可以得到3个方向的重力信息
float[] values = event.values;
float x = values[0];
float y = values[1];
float z = values[2];
Log.e("m_tag","X:"+x+" Y:"+y+" Z:"+z);
}
//灵敏度发生变化
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
3、 注册监听
//第一个参数表示监听器
//第二个参数表示监听的传感器类型, 通过sensorManager.getDefaultSensor(Sensor类型)
//灵敏度SENSOR_DELAY_UI普通等级, SENSOR_DELAY_GAME游戏等级, SENSOR_DELAY_FASTEST最快的
sensorManager.registerListener(sensorEventListener,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI);
4、 取消注册
sensorManager.unregisterListener(sensorEventListener);