Android 开发view、surfaceview、GLsurfaceview的区别及基于surfaceview的示波器开发

本文详细介绍了Android中View、SurfaceView和GLSurfaceView的区别,强调了SurfaceView在2D游戏开发中的优势。基于SurfaceView,作者展示了如何开发一个示波器应用,包括背景绘制、坐标轴绘制、正余弦函数的图形绘制,并通过SurfaceHolder控制线程更新画面。项目截图展示了示波器的运行效果。
摘要由CSDN通过智能技术生成

Android 开发view、surfaceview、GLsurfaceview的区别及基于surfaceview的示波器开发

Android画布(View SurfaceView GLsurfaceView)

View:显示视图,内置画布,提供图形绘制函数、触屏事件、按键事件函数等;必须在UI主线程内更新画面,速度较慢。

SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发;是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view快。

GLSurfaceView:基于SurfaceView视图再次进行拓展的视图类,专用于3D游戏开发的视图;是SurfaceView的子类,openGL专用。


SurfaceView和View的区别为:View的绘图必须在当前UI线程中进行,也就是部分程序需要更新View组件时总要采用新的线程去更新SurfaceView的绘制;但SurfaceView就不会存在这个问题,因为SurfaceView的绘图是由SurfaceHolder来完成的。

对于View组件来说,如果程序需要花费较长的时间来更新绘画,那么主UI线程将会被阻塞,无法响应用户的任何动作;而SurfaceHolder则会启用新的线程去更新SurfaceView的绘制,因此不会阻塞主UI线程。

一般来说,如果Android程序或游戏界面的动画元素较多,而且很多动画元素的移动都需要通过定时器来控制,就可以考虑SurfaceView,而不是View。

所以基于以上,根据不同的时间需求,一般分成两类。
1.被动更新画面的,用view就好了。因为画面的更新是依赖于 onTouch 来更新,可以直接使用 invalidate()。这种情况下,这一次Touch和下一次的Touch需要的时间比较长些,不会产生影响。

2.主动更新,比如一个人在一直跑动。这就需要一个单独的thread不停的重绘人的状态,避免阻塞main UI thread。所以显然view不合适,需要surfaceView来控制。

一般2D游戏开发使用SurfaceView足够,因为它也是google专们扩展用于2D游戏开发的画布使用普通的游戏画布(Android中2D专用游戏画布)中进行绘制图片,然后在GLSurfaceView(Android中3D游戏专用画布)中渲染图片的对比中发现GLSurfaceView的效率高于SurfaceView的30倍;GLSurfaceView的效率主要是因为机器硬件的GPU加速,现在flash技术也有了GPU加速技术;

基于SurfaceView开发的示波器

程序代码如下:
1、绘制示波器背景颜色及坐标轴

    private void drawBack(SurfaceHolder holder)
    {
   
        Canvas canvas = holder.lockCanvas();
        // 绘制白色背景
        canvas.drawColor(Color.WHITE);
        paint.setColor(Color.BLACK);
        // 绘制坐标轴
        canvas.drawLine(X_OFFSET, centerY,
                screenWidth, centerY, paint);
        canvas.drawLine(X_OFFSET, 40f, X_OFFSET
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值