这个是为实现全屏手写输入准备的。
Android平台自身提供了一个底层的显示接口-FLINGER服务,通过这个接口,我们可以实现创建一个新的显示区域来绘制想要的显示内容,并和原有的屏幕输出混合输出到屏幕上。
要在普通应用里使用这个接口,
1、必须指定在AndroidManifest.xml里指定android.permission.ACCESS_SURFACE_FLINGER权限,添加:
<uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" />
2、用系统KEY来签名包,在Android.mk里写上:
LOCAL_CERTIFICATE := platform
然后就可在应用里使用FLINGER服务了,实例片段如下:
canvas.drawColor(0x0);
Paint p = new Paint();
p.setColor(Color.RED);
canvas.drawLine(0, 0, 240, 320, p);
canvas.drawLine(240, 0, 0, 320, p);
//提交更新,让新的内容输出到屏幕
mSurface.unlockCanvasAndPost(canvas);
mSurface.openTransaction();
//mSurface.setPosition(0, 0);
//mSurface.setSize(240, 320);
//让这个Surface显示到最上层
mSurface.setLayer(99999);
mSurface.show();
mSurface.closeTransaction();
}
catch (OutOfResourcesException e)
{
Log.e(TAG, e.toString());
}
通过SurfaceSession, 我们可以创建多个Surface, Surface之间的混合是由FLINGER服务直接完成的, 使用者不需要关心, 直接在绘制即可。
如果内核支持多层, 通过打开/dev/fbX来直接写屏,应该可以实现相同的效果, 不过貌似用官方接口正规一些。
没图没真相,上示例的图