当前位置: 首页 > news >正文

汽配信息门户网站模板网站接入服务单位

汽配信息门户网站模板,网站接入服务单位,怎么配置wordpress,wordpress 七牛图床#xfeff;#xfeff; 什么是Surface#xff1f; 简单地说Surface对应了一块屏幕缓冲区#xff0c;每个window对应一个Surface#xff0c;任何View都是画在Surface上的#xff0c;传统的view共享一块屏幕缓冲区#xff0c;所有的绘制必须在UI线程中进行 什么是Surf… 什么是Surface 简单地说Surface对应了一块屏幕缓冲区每个window对应一个Surface任何View都是画在Surface上的传统的view共享一块屏幕缓冲区所有的绘制必须在UI线程中进行 什么是SurfaceView 说SurfaceView是一个View也许不够严谨然而从定义中 public class SurfaceView extends View {...}显示SurfaceView确实是派生自View但是SurfaceView却有着自己的Surface继续看SurfaceView的源码 1.if (mWindow null) {   2.      mWindow new MyWindow(this);   3.      mLayout.type mWindowType;   4.      mLayout.gravity Gravity.LEFT|Gravity.TOP;   5.      mSession.addWithoutInputChannel(mWindow, mWindow.mSeq, mLayout,   6.      mVisible ? VISIBLE : GONE, mContentInsets);   7.}  很明显每个SurfaceView创建的时候都会创建一个MyWindownew MyWindow(this)中的this正是SurfaceView自身因此将SurfaceView和window绑定在一起而前面提到过每个window对应一个Surface所以SurfaceView也就内嵌了一个自己的Surface可以认为SurfaceView是来控制Surface的位置和尺寸。大家都知道传统View及其派生类的更新只能在UI线程然而UI线程还同时处理其他交互逻辑这就无法保证view更新的速度和帧率了而SurfaceView可以用独立的线程来进行绘制因此可以提供更高的帧率例如游戏摄像头取景等场景就比较适合用SurfaceView来实现。 什么是SurfaceHolder.Callback SurfaceHolder.Callback主要是当底层的Surface被创建、销毁或者改变时提供回调通知由于绘制必须在surface被创建后才能进行因此SurfaceHolder.Callback中的surfaceCreated 和surfaceDestroyed 就成了绘图处理代码的边界。SurfaceHolder,可以把它当成Surface的容器和控制器用来操纵Surface。处理它的Canvas上画的效果和动画控制表面大小像素等。 为什么普通view只能在UI线程刷新 UI线程是最重要的线程它既不能被阻塞也不是线程安全的如果你了解多线程操作的话对于线程安全、同步锁等等这样的词语应该不陌生UI线程负责绘制界面和分发窗口事件任务是非常之重通常多线程处理时为了保证访问资源的正确性通常对于某些操作都会加上同步锁这样会显然会降低效率而且还会涉及到线程的等待与线程上下文切换为了提高效率UI线程不在使用这些繁琐的多线程机制为了保证对UI操作的正确性只允许在UI线程中操作UI。在非UI线程中可通过post或者runOnUiThread来刷新view 其它的一些总结 SurfaceView是视图(View)的继承类这个视图里内嵌了一个专门用于绘制的Surface。你可以控制这个Surface的格式和尺寸。SurfaceView控制这个Surface的绘制位置。 Surface是纵深排序(Z-ordered)的这表明它总在自己所在窗口的后面。Surfaceview提供了一个可见区域只有在这个可见区域内的Surface部分内容才可见可见区域外的部分不可见。Surface的排版显示受到视图层级关系的影响它的兄弟视图结点会在顶端显示。这意味者 Surface的内容会被它的兄弟视图遮挡这一特性可以用来放置遮盖物(overlays)(例如文本和按钮等控件)。注意如果Surface上面 有透明控件那么它的每次变化都会引起框架重新计算它和顶层控件的透明效果这会影响性能。 你可以通过SurfaceHolder接口访问这个SurfacegetHolder()方法可以得到这个接口。 SurfaceView变得可见时Surface被创建SurfaceView隐藏前Surface被销毁。这样能节省资源。如果你要查看Surface被创建和销毁的时机可以重载surfaceCreated(SurfaceHolder)和 surfaceDestroyed(SurfaceHolder)。 SurfaceView的核心在于提供了两个线程UI线程和渲染线程。这里应注意 1. 所有SurfaceView和SurfaceHolder.Callback的方法都应该在UI线程里调用一般来说就是应用程序主线程。渲染线程所要访问的各种变量应该作同步处理 2. 由于Surface可能被销毁它只在SurfaceHolder.Callback.surfaceCreated()和SurfaceHolder.Callback.surfaceDestroyed()之间有效所以要确保渲染线程访问的是合法有效的Surface。 以上总结基于网上的一些资料以及个人的理解如有错误还请指正~ 本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接http://www.linuxidc.com/Linux/2012-07/64223.htm SurfaceView是View类的继承类这个View里内嵌了一个专门用于绘制的Surface这个可以类似的理解成为一个在View里的Canvas。你可以控制这个Surface的格式和尺寸。Surfaceview类则控制这个Surface在屏幕上的正确位置。   《Android高级编程》里这样说   在一般情况下应用程序的View都是在相同的GUI线程中绘制的。这个主应用程序线程同时也用来处理所有的用户交互例如按钮单击或者文本输入。   对于一个View的onDraw()方法不能够满足将其移动到后台线程中去。因为从后台线程修改一个GUI元素会被显式地禁止的。   当需要快速地更新View的UI或者当前渲染代码阻塞GUI线程的时间过长的时候SurfaceView就是解决上述问题的最佳选择。SurfaceView封装了一个Surface对象而不是Canvas。这一点很重要因为Surface可以使用后台线程绘制。对于那些资源敏感的操作或者那些要求快速更新或者高速帧率的地方例如使用3D图形创建游戏或者实时预览摄像头这一点特别有用。          1. 何时应该使用SurfaceView          SurfaceView使用的方式与任何View所派生的类都是完全相同的。可以像其他View那样应用动画并把它们放到布局中。          SurfaceView封装的Surface支持所有标准的Canvas方法进行绘图同时也支持完全的OpenGL ES 库。          使用OpenGL你可以在Surface上绘制任何支持2D或者3D对象与在2D画布上模拟相同的效果相比这种方法可以依靠硬件加速可用的时候来极大地提高性能。          对于显示动态的3D图像来说例如那些使用Google Earth 功能的应用程序或者那些提供沉浸体验的交互式游戏Surface特别有用。它还是实时显示摄像头预览的最佳选择。   2. 创建一个新的SurfaceView控件   创建一个新的SurfaceView控件需要创建一个新的扩展了SurfaceView的类并实现SurfaceHolder.Callback。   SurfaceHolder回调可以在底层的Surface被创建和销毁的时候通知View并传递给它SurfaceHolder对象的引用其中包含了当前有效的Surface。   一个典型的SurfaceView 设计模型包括一个由Thread所派生的类它可以接收对当前的SurfaceHolder的引用并独立地更新它。   3. 使用SurfaceView创建3D控件   Android完全支持OpenGL ES 3D 渲染框架其中包含了对设备的硬件加速的支持。SurfaceView控件提供了一个表面可以在它上面渲染你的OpenGL场景。   那么我们在使用的时候可以这样使用   被动更新画面的。比如棋类这种用view就好了。因为画面的更新是依赖于 onTouch 来更新可以直接使用 invalidate。 因为这种情况下这一次Touch和下一次的Touch需要的时间比较长些不会产生影响。   主动更新。比如一个人在一直跑动。这就需要一个单独的thread不停的重绘人的状态避免阻塞main UI thread。所以显然view不合适需要surfaceView来控制。       可以直接从内存或硬件设备比如相机等取得图像数据,是个非常重要的绘图容器。   它的特性是可以在主线程之外的线程中向屏幕绘图。这样可以避免画图任务繁重的时候造成主线程阻塞从而提高了程序的反应速度。   如何去使用一个SurfaceView   首先继承SurfaceView并实现SurfaceHolder.Callback接口。因为使用SurfaceView 有一个原则所有的绘图工作必须得在Surface 被创建之后才能开始。可以被直接复制到显存从而显示出来这使得显示速度会非常快而在Surface 被销毁之前必须结束。所以Callback 中的surfaceCreated 和surfaceDestroyed 就成了绘图处理代码的边界。   需要重写的方法    1public void surfaceChanged(SurfaceHolder holder,int format,int width,int height){}        //在surface的大小发生改变时激发    2public void surfaceCreated(SurfaceHolder holder){}        //在创建时激发一般在这里调用画图的线程。    3public void surfaceDestroyed(SurfaceHolder holder) {}        //销毁时激发一般在这里将画图的线程停止、释放。   整个过程继承SurfaceView并实现SurfaceHolder.Callback接口 ---- SurfaceView.getHolder()获得SurfaceHolder对象 ----SurfaceHolder.addCallback(callback)添加回调函数----SurfaceHolder.lockCanvas()获得Canvas对象并锁定画布---- Canvas绘画 ----SurfaceHolder.unlockCanvasAndPost(Canvas canvas)结束锁定画图并提交改变将图形显示。   关于SurfaceHolder   这里用到了一个类SurfaceHolder,可以把它当成surface的控制器用来操纵surface。处理它的Canvas上画的效果和动画控制表面大小像素等。 几个需要注意的方法 (1)、abstract void addCallback(SurfaceHolder.Callback callback); // 给SurfaceView当前的持有者一个回调对象。 (2)、abstract Canvas lockCanvas(); // 锁定画布一般在锁定后就可以通过其返回的画布对象Canvas在其上面画图等操作了。 (3)、abstract Canvas lockCanvas(Rect dirty); // 锁定画布的某个区域进行画图等..因为画完图后会调用下面的unlockCanvasAndPost来改变显示内容。 // 相对部分内存要求比较高的游戏来说可以不用重画dirty外的其它区域的像素可以提高速度。 (4)、abstract void unlockCanvasAndPost(Canvas canvas); // 结束锁定画图并提交改变。   测试代码如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 /*      *  Android开发之SurfaceView      *  SurfaceView01.java      *  Created on: 2011-8-25      *  Author: blueeagle      *  Email: liujiaxianggmail.com     */          package com.blueeagle;               import android.app.Activity;      import android.content.Context;      import android.graphics.Canvas;      import android.graphics.Color;      import android.graphics.Paint;      import android.graphics.Rect;      import android.os.Bundle;      import android.view.SurfaceHolder;      import android.view.SurfaceView;                public class SurfaceView01 extends Activity {           /** Called when the activity is first created. */         Override           public void onCreate(Bundle savedInstanceState) {               super .onCreate(savedInstanceState);               setContentView( new MyView( this ));           }           //视图内部类            class MyView extends SurfaceView implements SurfaceHolder.Callback           {               private SurfaceHolder holder;               private MyThread myThread;                public MyView(Context context) {                   super (context);                   // TODO Auto-generated constructor stub                    holder this .getHolder();                   holder.addCallback( this );                   myThread new MyThread(holder); //创建一个绘图线程                }                         Override               public void surfaceChanged(SurfaceHolder holder, int format, int width,                       int height) {                   // TODO Auto-generated method stub                                      }                         Override               public void surfaceCreated(SurfaceHolder holder) {                   // TODO Auto-generated method stub                    myThread.isRun true ;                   myThread.start();               }                         Override               public void surfaceDestroyed(SurfaceHolder holder) {                   // TODO Auto-generated method stub                    myThread.isRun false ;               }                             }           //线程内部类            class MyThread extends Thread           {               private SurfaceHolder holder;               public boolean isRun ;               public  MyThread(SurfaceHolder holder)               {                   this .holder holder;                    isRun true ;               }               Override               public void run()               {                   int count 0;                   while (isRun)                   {                       Canvas c null ;                       try                     {                           synchronized (holder)                           {                               c holder.lockCanvas(); //锁定画布一般在锁定后就可以通过其返回的画布对象Canvas在其上面画图等操作了。                                c.drawColor(Color.BLACK); //设置画布背景颜色                                Paint p new Paint(); //创建画笔                                p.setColor(Color.WHITE);                               Rect r new Rect(100, 50, 300, 250);                               c.drawRect(r, p);                               c.drawText( 这是第 (count) 秒 , 100, 310, p);                               Thread.sleep(1000); //睡眠时间为1秒                            }                       }                       catch (Exception e) {                           // TODO: handle exception                            e.printStackTrace();                       }                       finally                       {                           if (c! null )                           {                               holder.unlockCanvasAndPost(c); //结束锁定画图并提交改变。                                     }                       }                  }               }           }      }
http://www.w-s-a.com/news/213647/

相关文章:

  • 中介订制网站开发玉溪网站建设设计
  • 免费网站免费无遮挡手机页面设计软件
  • 网站建设需求规格说明书中山模板建站公司
  • wordpress get值网站建设 seo sem
  • 网站建设微信开发工厂代加工平台
  • 厦门 网站建设 公司哪家好asp.net 创建网站
  • 专业北京网站建设凡科网做网站怎么样
  • 金富通青岛建设工程有限公司网站浙江省住建厅四库一平台
  • 有搜索引擎作弊的网站企业建设H5响应式网站的5大好处6
  • 是做网站编辑还是做平面设计seo外包公司接单
  • 做性的网站有哪些苏州专业网站设计制作公司
  • 陵水网站建设友创科技十大优品店排名
  • 想换掉做网站的公司简要说明网站制作的基本步骤
  • 国企公司网站制作wordpress 浮动定位
  • 网站网页直播怎么做的企业网站建设推荐兴田德润
  • 网站建设熊猫建站厦门seo全网营销
  • 扁平网站设计seo是什么岗位的缩写
  • 工商企业网站群晖配置wordpress 80端口
  • 企业网站建设流程步骤镇江东翔网络科技有限公司
  • 网络工程师和做网站哪个难网络建站如何建成
  • 网站建设需要哪些项目游民星空是用什么做的网站
  • 旅游网站建设要如何做百度商城网站建设
  • destoon 网站搬家中国企业500强都有哪些企业
  • 商城网站前端更新商品天天做吗哈尔滨做网站优化
  • 新乡网站开发wordpress 产品分类侧边栏
  • 网站自己做自己的品牌好做互联网企业分类
  • 项目网站建设方案石家庄网站快速排名
  • 网站开发大作业报告做电商网站的参考书
  • Apache局域网网站制作wordpress外链自动保存
  • 网站备案号要怎么查询千锋教育培训机构地址