1.概念 SurfaceView是View类的子类,可以直接从内存或者DMA等硬件接口取得图像数据,是个非常重要的绘图视图。它的特性是:可以在主线程之外的线程中向屏幕绘图上。...在游戏开发中多用到SurfaceView,游戏中的背景、人物、动画等等尽量在画布canvas中画出。...2.实现方法 1)实现步骤 a.继承SurfaceView b.实现SurfaceHolder.Callback接口 2)需要重写的方法 public void surfaceChanged...几个需要注意的方法: abstract void addCallback(SurfaceHolder.Callback callback); // 给SurfaceView当前的持有者一个回调对象。...4)总结整个过程 继承SurfaceView并实现SurfaceHolder.Callback接口 ----> SurfaceView.getHolder()获得SurfaceHolder对象 --
下面就贴上一个小程序代码,主要运用SurfaceView来实现在屏幕上画一个圆,你可以通过按方向键和触摸屏幕来改变圆的位置 代码: Activity package com.view; import...mHolder; // 用于控制SurfaceView private Thread t; // 声明一条线程 private boolean flag; // 线程运行的标识...surfaceDestroyed(SurfaceHolder holder) { flag = false; // 把线程运行的标识设置成false } /** * 当屏幕被触摸时调用...Override public boolean onTouchEvent(MotionEvent event) { x = (int) event.getX(); // 获得屏幕被触摸时对应的...X轴坐标 y = (int) event.getY(); // 获得屏幕被触摸时对应的Y轴坐标 return true; } /**
SurfaceView,顺便总结总结了!...根据Java方面的常规知识,我们知道通常画图是在一个Canvas对象上面进行的,由此,可以推知一个Surface对象中应该包含有一个Canvas对象 02 — SurfaceView是什么 SurfaceView...在SurfaceView中有一个方法getHolder,可以很方便地获得SurfaceView所对应的Surface所对应的SurfaceHolder。...SurfaceView如果为用户可见的时候,创建SurfaceView的SurfaceHolder用于显示视频流解析的帧图片,如果发现SurfaceView变为用户不可见的时候,则立即销毁SurfaceView...SurfaceView 不能嵌套使用。
SurfaceView简介 简单的说SurfaceView就是一个有Surface的View里面内嵌了一个专门用于绘制的Surface,SurfaceView控制这个Surface的格式和尺寸以及绘制位置...SurfaceView就是在Window上挖一个洞,它就是显示在这个洞里,其他的View是显示在Window上,所以View可以显式在 SurfaceView之上,你也可以添加一些层在SurfaceView...SurfaceView自身,因此将SurfaceView和window绑定在一起,而前面提到过每个window对应一个Surface, 所以SurfaceView也就内嵌了一个自己的Surface,可以认为...就是管理数据的地方, SurfaceView就是展示数据的地方,只有通过SurfaceView才能展现Surface中的数据。...surfaceview变得可见时,surface被创建;surfaceview隐藏前,surface被销毁。 这样能节省资源。
SurfaceView是View的子类,使用的方式与任何View所派生的类都是完全相同的,可以像其他View那样应用动画,并把它们放到布局中。 ...SurfaceView封装的Surface支持使用本章前面所描述的所有标准Canvas方法进行绘图,同时也支持完全的OpenGL ES库。 ...SurfaceView 和 View 的明显不同之处在于: 1、继承SurfaceView 的视图可以另起一个线程,或者说在子线程中更新视图。...2、 SurfaceView 的画图方法是在子线程中执行的 而 View类的那个示例 的画图方法是在UI线程中执行的。...SurfaceView 类的事件处理规则和View一样。
在前文中,我们分析了应用程序窗口连接到WindowManagerService服务的过程。在这个过程中,WindowManagerService服务会为应用程序...
首先来了SurfaceView这个控件类 SurfaceView类 ?...构造方法 方法名称 描述 public SurfaceView(Context context) 通过Context创建SurfaceView对象 public SurfaceView(Context...它是一个接口,用于管理SurfaceView。...这样理解: SurfaceView它用于显示,SurfaceHolder就是用于用来管理这个显示的SurfaceView对象的,但在SurfaceHolder是怎么样去管理这个对象的呢?...这样就达到了管理SurfaceView的目的。
当我们需要开发一个复杂游戏的时候,而且对程序的执行效率要求很高时,View类就不能满足需求了,这时必须用SurfaceView类进行开发。...例如,对速度要求很高的游戏时,View类就不能满足需求了,这时必须使用SurfaceView类进行开发。例如,对速度要求很高的游戏,可以使用双缓冲来显示。...游戏中的背景、人物、动画等都需要绘制在一个画布(Canvas)上,而SurfaceView可以直接访问一个画布,SurfaceView 是提供给需要直接画像素而不是使用窗体部件的应用使用的。...this); setContentView(gameView); } } GameSurfaceView public class GameSurfaceView extends SurfaceView
Path 是用来确定自由曲线的轨迹。 在 MyPath 的 draw() 方法中我们创建了一个 Paint 用于图形的描绘。...本来想继承 View 来写,后来仔细想了下最后还是用 SurfaceView 来进行实现。 这里简单说一下 View 和 SurfaceView 的区别。...View 适合用于主动更新的情况,而 SurfaceView 则适用于被动更新的情况,比如频繁刷新界面。...因为我们这个涂鸦的 View,是频繁进行刷新的,每次触摸屏幕都会进行相应的界面刷新,所以用 SurfaceView 来实现就比较合理了。...这里我直接结合代码来讲一下 DoodleView 的实现思路,因为我是继承自 SurfaceView 来写的,对于 SurfaceView 不是很了解的朋友,可以先看一下这篇文章 Android中的SurfaceView
在使用一些诡异的系统以及诡异的触摸框的时候,也许会出现 WPF 程序触摸失效,失效的本质原因是 Win32 层应用触摸失效。...也许出现的问题是某个窗口设置 TopMost 然后插拔一些触摸设备等,这些行为,如果触摸设备太过诡异,也许就会让 Win32 窗口触摸失效。...而我自己基于开源的 WPF 框架也定制了可以从触摸线程都重启的强力版本,当然了,这个版本非开源的版本 在使用本文的方法之前,请确定你对触摸有足够的了解 如果你对触摸的了解很少,那么我推荐你先看以下博客...WPF 触摸屏应用需要了解的知识 浅谈 Windows 桌面端触摸架构演进 WPF 客户端开发需要知道的触摸失效问题 对于 Win32 应用来说,如果应用的触摸失效了,可以的解决方法是重新注册一次触摸,...关于在 WPF 中的触摸调用细节请看 WPF 触摸到事件 和 WPF 通过 InputManager 模拟调度触摸事件 重启注册触摸的步骤就是先反注册,然后再次注册。
---- SurfaceView和View的区别 SurfaceView和View的区别: View主要适用于主动更行的情况,而SurfaceView适用于被动更新,例如频繁的刷新。...View在主线程中对画面进行,而SurfaceView通常会在一个子线程中进行页面的刷新 View在绘图时没有使用双缓冲机制,而SurfaceView在底层实现了双缓冲机制 总之,如果你的自定义View...---- SurfaceView的使用 SurfaceView的使用虽然比View要复杂,但是SurfaceView在使用时有一套使用的模板代码,大部分的SurfaceView绘图操作都可以套用这样的模板代码来进行编写...通常情况下,使用以下步骤来创建一个SurfaceView的模板 创建SurfaceView 创建自定义的SurfaceView 继承自 SurfaceView,并且实现两个接口:SurfaceHolder.Callback...在自定义的SurfaceView的构造方法中,需要对SurfaceView进行初始化。
本文实例为大家分享了Android SurfaceView画板操作的具体代码,供大家参考,具体内容如下 画板——画路径 package com.example.review.view; import...; /** * 画板画路径 */ public class HuabanView extends SurfaceView implements SurfaceHolder.Callback {...attrs) { super(context, attrs); surfaceHolder = getHolder(); surfaceHolder.addCallback(this);//获得surfaceview...; /** * 画板画路径 * 画动态直线 */ public class LineView extends SurfaceView implements SurfaceHolder.Callback...attrs) { super(context, attrs); surfaceHolder = getHolder(); surfaceHolder.addCallback(this);//获得surfaceview
即Surface是保存原始缓存区的句柄,也就是显示的像素数据 SurfaceView SurfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的Surface。...Surfaceview控制这个Surface的绘制位置。 surface是纵深排序(Z-ordered)的,这表明它总在自己所在窗口的后面。...surfaceview变得可见时,surface被创建;surfaceview隐藏前,surface被销毁。这样能节省资源。...surfaceview的核心在于提供了两个线程:UI线程和渲染线程。...SurfaceHolder是用来操作surface的接口,通过SurfaceView的getHolder来获取 Surface、SurfaceView和SurfaceHolder的关系类似MVC。
android.os.Bundle; import android.view.Menu; import android.view.SurfaceHolder; import android.view.SurfaceView...getMenuInflater().inflate(R.menu.main, menu); return true; } /** * surfaceview的实例,用来处理贴图问题 *.../ class MyView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder holder...首先是声明一个继承SurfaceView并且实现SurfaceHolder.CallBack的子类 class MyView extends SurfaceView implements SurfaceHolder.Callback...在子类中获得一个用于控制suerfce对象的surfaceHolder对象 holder = SurfaceView.getHodler(); holder.addCallback() 3.
最近使用 WPF 程序,在不停插拔触摸设备会让 WPF 程序触摸失效。通过分析 WPF 源代码可以找到 WPF 触摸失效的原因。...获取触摸流程循环用于拿到用户触摸相关。很多的时候,在用户正常使用的流程只是运行初始化流程循环一次,之后在用户触摸的时候就通过获取触摸流程循环拿到值。...因为 GetPenEvent 和 GetPenEventMultiple 都只有在触摸屏收到触摸信息或者 _pimcResetHandle 被释放会返回,而在用户拔出触摸屏时,触摸屏是没有收到触摸信息,...因为在用户插入触摸屏时触发了 TabletAdded 消息,在之后用户触摸时不会有其他的插拔触摸相关消息。...实际上这里在 _handles 没有值就是用户没有触摸屏,用户插入触摸屏的时间是很少的,没有几个用户一天没事都在插入拔出触摸屏,所以在用户插入触摸屏时再创建一个新的线程,在用户拔出触摸屏去掉这个线程是可以的
播放视频或者渲染其他的动画的时候,有两个View组件可供选择,SurfaceView和TextureView,GLSurfaceView是SurfaceView是子类,这儿还是归类到SurfaceView...SurfaceView实现机制 双缓冲机制 TextureView实现机制 TextureView和SurfaceView的优缺点 1.SurfaceView实现机制 SurfaceView继承自View...SurfaceView为什么要这么设计? 优点:这样的好处是对这个Surface的渲染可以放到单独线程去做,渲染复杂的动画不会影响主线程的的响应。...4.TextureView和SurfaceView的优缺点 SurfaceView TextureView 内存 低 高 耗电 低 高 绘制效率 及时 1 ~ 3帧的延迟 截图 不支持 支持 动画 不支持...支持 不过GLSurfaceView是SurfaceView的子类,除了拥有SurfaceView的优点,GLSurfaceView也支持截图和动画操作。
SurfaceView 简介 简单的说SurfaceView就是一个有Surface的View里面内嵌了一个专门用于绘制的Surface,SurfaceView 控制这个 Surface 的格式和尺寸以及绘制位置...SurfaceView 就是在 Window 上挖一个洞,它就是显示在这个洞里,其他的View是显示在Window上,所以View可以显式在 SurfaceView之上,你也可以添加一些层在SurfaceView...所以SurfaceView也就内嵌了一个自己的Surface,可以认为SurfaceView是来控制Surface的位置和尺寸。...surfaceview变得可见时,surface被创建;surfaceview隐藏前,surface被销毁。 这样能节省资源。...SurfaceView如果为用户可见的时候,创建SurfaceView的SurfaceHolder用于显示视频流解析的帧图片,如果发现SurfaceView变为用户不可见的时候,则立即销毁SurfaceView
本文实例为大家分享了SurfaceView视频弹幕展示的具体代码,供大家参考,具体内容如下 全部代码如下: package com.example.app2; import android.graphics.Canvas...app.AppCompatActivity; import android.text.TextUtils; import android.view.SurfaceHolder; import android.view.SurfaceView...mSvVideo; private SurfaceView mSvDanMu; private EditText mEd; private MediaPlayer mediaPlayer; private...) findViewById(R.id.sv_video); mSvDanMu = (SurfaceView) findViewById(R.id.sv_danMu); mEd = (EditText)...android:id="@+id/sv_video" android:layout_width="match_parent" android:layout_height="280dp" / <SurfaceView
本文主要告诉大家如何获得所有的触摸设备的触摸精度和触摸点数。 需要通过反射的方法才可以拿到触摸的精度。...使用 Tablet.TabletDevices 可以获得所有的触摸设备,获得触摸点数可以通过下面代码 foreach (TabletDevice device in Tablet.TabletDevices...) { Console.WriteLine("触摸点数" + device.StylusDevices.Count);//触摸点数 } 触摸精度就需要使用反射 var builder...TabletDeviceType.Touch) { builder.Append(string.Format("{1}:{2} 点触摸...device.Name, device.StylusDevices.Count, tabletSize)); } } 如果发现设备触摸失效
领取专属 10元无门槛券
手把手带您无忧上云