View和SurfaceView都可以用于绘制图形,但各有各的适用场合。一般情况,主动更新,不考虑UI线程的限制,双缓存加速等情况下会优先考虑SurfaceView。
下面把上篇中的MyView通过继承SurfaceView来重新编写,具体如下:
public class MyView extends SurfaceView implements Callback, Runnable { private Paint mPaint; private SurfaceHolder mSurfaceHolder; private Thread mThread; private void initial() { mPaint = new Paint(); mPaint.setAntiAlias(true); this.setKeepScreenOn(true); mPaint.setColor(Color.RED); mThread = new Thread(this); mSurfaceHolder = getHolder(); mSurfaceHolder.addCallback(this); } public MyView(Context context) { super(context); initial(); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); initial(); } private void draw() { Canvas mCanvas = null; try { mCanvas = mSurfaceHolder.lockCanvas(); mCanvas.drawColor(Color.WHITE); mCanvas.drawText("绘制文字", 10, 20, mPaint); mCanvas.drawCircle(35, 50, 20, mPaint); } catch (Exception e) { e.printStackTrace(); } finally { if (mCanvas != null) { mSurfaceHolder.unlockCanvasAndPost(mCanvas); } } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { mThread.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { } @Override public void run() { draw(); } }
说明:
- 获取SurfaceHolder:mSurfaceHolder = getHolder();
- 为SurfaceHolder添加CallBack:mSurfaceHolder.addCallback(this);
- 创建绘制线程:mThread = new Thread(this);
- 绘制函数:draw();自定义的函数名称,如果你喜欢,你可以在遵守规则的前提下随意命名;
- 当SurfaceView被创建时,启动绘制线程:mThread.start();
- 从SurfaceHolder获得Canvas对象:mCanvas = mSurfaceHolder.lockCanvas();
调用方式和以前一样,这也仅仅是一个View,只不过是继承SurfaceView而已!
效果如图:
希望对你有所帮助!:)
相关推荐
android surfaceview自定义拍照 绘制头像轮廓 注明:是借用网上的demo基础上进行修改的
自定义surfaceVIew,讲解在子线程中绘制的demo
由于其拥有独立的绘图表面,因此SurfaceView的UI就可以在一个独立的线程中进行绘制。又由于SurfaceView不会占用主线程资源,一方面可以实现复杂而高效的UI,另一方面又不会导致用户输入得不到及时响应
用SurfaceView自定义绘制时钟效果,attr自定义属性效果,时钟秒针每秒绘制一次,分针没分绘制一次
1. 人脸检测。 2. 自定义图片质量参数,包括最小识别人脸,光亮度,模糊度等。 3.自定义画人脸框,可以替换成任意图片。
Android Surfaceview的绘制与应用 一.surfaceview与view的区别 Android 提供了view进行视图的绘制,可以满足大部分的会图需求,但在有些时候却是心有余而力不足。我们知道,view通过刷新来绘制视图。android系统...
在这个例子中,我用代码制作了一个拍摄界面,里面只有三个控件,一个是自己封装的CameraView,它继承了SurfaceView,一个是悬浮在CameraView上的按 钮,点击它可以捕捉画面并把图像存储到sdCard的根目录下,还有一个...
自定义SurfaceView 实现手写板功能,绘画流畅不卡顿。可保存为Bitmap,可重现绘画轨迹。
自定义控件(类似按钮等)的使用,自定义一个SurfaceView。如某一块的动态图(自定义相应),或者类似UC浏览器下面的工具栏,感兴趣的朋友可以了解下
在布局中直接通过自定义 SurfaceView 来绘制提高效率 通过配置文件来控制雪花降落速度、位置 weather_scene_slight_snow_day.xml SnowFall.java protected SnowFall(Context context) { super(context); // ...
1、首先了解SurfaceView的基本用法,它跟一般的View不太一样,采用的双缓存机制,可以在子线程中绘制View,不会因为绘制耗时而失去流畅性,这也是选择使用SurfaceView去自定义这个抽奖大转盘的原因,毕竟绘制这个...
可以像传统自定义View那样直接继承GLViews,再使用这个canvas替换需要的东西。提供类似GPUImage里的Filter的API,可以在使用画布GL画东西时实现图像处理。提供的View是继承GLSurfaceView或TextureView的,可以使用这...
1. SurfaceView的定义 通常情况程序的View和用户响应都是在同一个线程中处理的,这也是为什么...SurfaceView中包含一个Surface对象,而Surface是可以在后台线程中绘制的。SurfaceView的性质决定了其比较适合一些场景
一个简单的surfaceview绘制,内赠送一个下载进度的监听view
米老鼠的时钟绘制,自定义SurfaceView实现可爱萌萌大的米老鼠时钟
Android SurfaceView+MediaRecorder实现的录音波浪图
今天给大家带来SurfaceView的一个实战案例,话说自定义View也是各种写,一直没有写过SurfaceView,这个玩意是什么东西?什么时候用比较好呢? 可以看到SurfaceView也是继承了View,但是我们并不需要去实现它的draw...
使用多种方式(View/SurfaceView/TextureView)实现高效绘制 B站xml弹幕格式解析 基础弹幕精确还原绘制 支持mode7特殊弹幕 多核机型优化,高效的预缓存机制 支持多种显示效果选项...
1. ImageView 绘制图片 2. SurfaceView 绘制图片 3. 自定义 View 绘制图片 1. 构造一个AudioRecord对象,其中需要