iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >如何在Android中使用Surfaceview
  • 845
分享到

如何在Android中使用Surfaceview

androidsurfaceview 2023-05-30 23:05:03 845人浏览 泡泡鱼
摘要

如何在Android中使用Surfaceview?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一.surfaceview与view的区别Android 提供了v

如何在Android中使用Surfaceview?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一.surfaceview与view的区别

Android 提供了view进行视图的绘制,可以满足大部分的会图需求,但在有些时候却是心有余而力不足。我们知道,view通过刷新来绘制视图。android系统通过vsync信号来进行屏幕的绘制。刷新的时间间隔为16毫秒。如果在16毫秒内完成了索要刷新的绘制操作,那么在视觉效果上就不会产生卡顿的感觉。如果逻辑操作过多,频繁刷新就会造成界面的卡顿。

  对于这一问题,Android提供了surfaceview来解决。它可以说是view的孪生兄弟,但他与view还是不同的,他与view的区别主要在一下几点:

    view 主要是用于主动更新的情况下,而surfaceview主要是用于被动更新的情况下,列如频繁的刷新。

    view主要是通过主线程对界面进行刷新,而surfaceview主要是通过子线程对view进行刷新。

    view在绘制时没有使用双缓冲机制,而surfaceview的底层是使用了双缓冲机制。

二.surfaceview的使用

surfaceview虽然使用比较复杂,但是他有一套使用的模板,这就使得他使用起来比较简单了,通常情况下,我们将会使用如下的方法步骤来实现surfaceview的创建:

   创建自定义的surfaceview,继承自surfaceview 。并实现连个接口surfaceholder.Callback和Runnable接口。

public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback, Runnable

看如下方法,分别对应了surfaceview的创建改变和销毁。

@Overridepublic void surfaceCreated(SurfaceHolder holder) {}@Overridepublic void surfaceChanged(SurfaceHolder holder, int fORMat, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}

我们来看看他的模板:

public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback, Runnable {  private SurfaceHolder mHolder;  private canvas mCanvs;  private Boolean mIsDrawing;  public MySurfaceView(Context context) {    this(context, null);  }  public MySurfaceView(Context context, AttributeSet attrs) {    this(context, attrs, 0);  }  public MySurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);  }  private void init() {    mHolder = getHolder();    mHolder.addCallback(this);    setFocusable(true);    setFocusableInTouchMode(true);    this.seTKEepScreenOn(true);  }  @Override  public void surfaceCreated(SurfaceHolder holder) {    mIsDrawing = true;    new Thread(this).start();  }  @Override  public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {  }  @Override  public void surfaceDestroyed(SurfaceHolder holder) {    mIsDrawing = false;  }  @Override  public void run() {    while (mIsDrawing) {      draw();    }  }  public void draw() {    try {      mCanvs = mHolder.lockCanvas();    } catch (Exception e) {    } finally {      mHolder.unlockCanvasAndPost(mCanvs);    }  }}

以上的模板基本满足大部分surfaceview的绘图需求,唯一要注意的是,要把

mHolder.unlockCanvasAndPost(mCanvs);

放到finally中以保证每次都能提交修改。

只要我们在run方法中不断的绘制就可以实现view的及时刷新,当然我们也可以在run方法中sleep减少资源的消耗。这个值一般在50到100毫秒之间。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: 如何在Android中使用Surfaceview

本文链接: https://www.lsjlt.com/news/222214.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在Android中使用Surfaceview
    如何在Android中使用Surfaceview?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一.surfaceview与view的区别Android 提供了v...
    99+
    2023-05-30
    android surfaceview
  • 如何在Android中使用SurfaceView制作一个天气动画效果
    如何在Android中使用SurfaceView制作一个天气动画效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先是最终实现的效果图:初识 SurfaceV...
    99+
    2023-05-31
    android surfaceview sur
  • Android中TextureView和SurfaceView怎么使用
    在Android中,TextureView和SurfaceView都是用于显示图形或视频的视图组件。它们的使用方式略有不同:1. 使...
    99+
    2023-09-29
    Android
  • Android中SurfaceView和普通view的区别及使用
    目录1 SurfaceView介绍2 SurfaceView 使用步骤3 SurfaceHolder4 SurfaceView的简单使用1 SurfaceView介绍 Surfa...
    99+
    2024-04-02
  • Android系统中view与SurfaceView怎么用
    这篇文章给大家分享的是有关Android系统中view与SurfaceView怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、引入:Android提供了View来进行绘图处理,在大部分情况下,View都能...
    99+
    2023-06-29
  • RadioGroup如何在Android中使用
    本篇文章给大家分享的是有关RadioGroup如何在Android中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体如下:activity_main.xml<xml...
    99+
    2023-05-30
    android radiogroup
  • webview如何在Android中使用
    这篇文章给大家介绍webview如何在Android中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Androi1. 打开网页时不调用系统浏览器, 而是在本WebView中显示:mWebView.setWebVie...
    99+
    2023-05-30
    android webview
  • Fragment如何在Android中使用
    本篇文章给大家分享的是有关Fragment如何在Android中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Fragment初探为了让界面可以在平板上更好地展示,Andr...
    99+
    2023-06-14
  • Selector如何在Android中使用
    Selector如何在Android中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Android中的Selector的用法 <&#...
    99+
    2023-05-31
    android selector sel
  • Button如何在Android中使用
    Button如何在Android中使用 ?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Android Button的基本用法Button的Click点击事件处理: mBu...
    99+
    2023-05-31
    android button roi
  • ijkplayer如何在android中使用
    这期内容当中小编将会给大家带来有关ijkplayer如何在android中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。导入到你的项目中android studio打开你的项目,File->Im...
    99+
    2023-05-30
    android ijkplayer
  • AsyncTask如何在Android中使用
    AsyncTask如何在Android中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 Android AsyncTask详解及使用方法 简介:&n...
    99+
    2023-05-31
    android asynctask cta
  • WallpaperManager如何在Android 中使用
    这篇文章给大家介绍WallpaperManager如何在Android 中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Android 中WallpaperManager用法实例注意:壁纸的设置得加入权限: <...
    99+
    2023-05-30
    android
  • Shape如何在Android中使用
    本篇文章给大家分享的是有关Shape如何在Android中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。ShapeDrawable是一种很常见的Drawable,可以理解为...
    99+
    2023-05-31
    android shape roi
  • FloatingActionButton如何在Android 中使用
    这篇文章将为大家详细讲解有关FloatingActionButton如何在Android 中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Android 中FloatingActionB...
    99+
    2023-05-31
    android floatingactionbutton roi
  • ThreadLocal如何在Android中使用
    这期内容当中小编将会给大家带来有关ThreadLocal如何在Android中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  ThreadLocal的使用在Looper类中得到很好的体现....
    99+
    2023-05-30
    android threadlocal
  • Android音频开发之SurfaceView的使用详解
    目录SurfaceView不同点双缓冲机制SurfaceHolder使用SurfaceView SurfaceView从源码上看继承自View,但在内部实现上SurfaceView和...
    99+
    2024-04-02
  • Android应用中利用SurfaceView截屏时出现黑屏如何解决
    这期内容当中小编将会给大家带来有关Android应用中利用SurfaceView截屏时出现黑屏如何解决,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。首先看我们一般是怎么用SurfaceView的publi...
    99+
    2023-05-31
    android sur surfaceview
  • Banner如何在Android应用中使用
    这期内容当中小编将会给大家带来有关Banner如何在Android应用中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。首先倒入一个依赖: compile 'com.youth.banner:b...
    99+
    2023-05-31
    android banner roi
  • Notification如何在Android应用中使用
    Notification如何在Android应用中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Android  Notification使用详解...
    99+
    2023-05-31
    android notification roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作