Android全屏Surface画图

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

 

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

view plaincopy to clipboardprint?

mSurfaceSession = new SurfaceSession(); //连接到FLINGER服务   

try {   

           //创建一个Surface,并在上面绘制   

    mSurface = new Surface(mSurfaceSession,    

            Process.myPid(),    

            Display.DEFAULT_DISPLAY,    

            240, 320,    

            PixelFormat.TRANSPARENT,   

            0);   

       //通过刚创建的Surface里获取一个Canvas,通过这个接口来绘制   

    Canvas canvas = mSurface.lockCanvas(null);   

 

    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());   

}  

     mSurfaceSession = new SurfaceSession(); //连接到FLINGER服务

     try {

                //创建一个Surface,并在上面绘制

     mSurface = new Surface(mSurfaceSession, 

     Process.myPid(), 

     Display.DEFAULT_DISPLAY, 

     240, 320, 

     PixelFormat.TRANSPARENT,

     0);

            //通过刚创建的Surface里获取一个Canvas,通过这个接口来绘制

        Canvas canvas = mSurface.lockCanvas(null);

        

        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来直接写屏,应该可以实现相同的效果, 不过貌似用官方接口正规一些。

 

123

本文来自CSDN博客,转载请标明出处:file:///C:/Documents%20and%20Settings/Administrator/桌面/Android全屏绘制%20-%20随心翱翔%20-%20CSDN博客.mht

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值