Android全屏绘制

本文介绍如何在Android平台上利用FLINGER服务实现全屏手写输入功能。通过指定权限并使用特定签名,开发者可以在应用程序中创建自定义显示区域,与原有屏幕内容混合输出。文章提供了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个是为实现全屏手写输入准备的。

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服务了,实例片段如下:

[c-sharp] view plain copy
  1. mSurfaceSession=newSurfaceSession();//连接到FLINGER服务
  2. try{
  3. //创建一个Surface,并在上面绘制
  4. mSurface=newSurface(mSurfaceSession,
  5. Process.myPid(),
  6. Display.DEFAULT_DISPLAY,
  7. 240,320,
  8. PixelFormat.TRANSPARENT,
  9. 0);
  10. //通过刚创建的Surface里获取一个Canvas,通过这个接口来绘制
  11. Canvascanvas=mSurface.lockCanvas(null);
  12. canvas.drawColor(0x0);
  13. Paintp=newPaint();
  14. p.setColor(Color.RED);
  15. canvas.drawLine(0,0,240,320,p);
  16. canvas.drawLine(240,0,0,320,p);
  17. //提交更新,让新的内容输出到屏幕
  18. mSurface.unlockCanvasAndPost(canvas);
  19. mSurface.openTransaction();
  20. //mSurface.setPosition(0,0);
  21. //mSurface.setSize(240,320);
  22. //让这个Surface显示到最上层
  23. mSurface.setLayer(99999);
  24. mSurface.show();
  25. mSurface.closeTransaction();
  26. }
  27. catch(OutOfResourcesExceptione)
  28. {
  29. Log.e(TAG,e.toString());
  30. }


通过SurfaceSession, 我们可以创建多个Surface, Surface之间的混合是由FLINGER服务直接完成的, 使用者不需要关心, 直接在绘制即可。

如果内核支持多层, 通过打开/dev/fbX来直接写屏,应该可以实现相同的效果, 不过貌似用官方接口正规一些。

没图没真相,上示例的图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值