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自定义拍照 绘制头像轮廓"是基于网上现有的示例代码进行了修改,用于实现一个自定义的拍照功能,并且在拍摄的照片上能够绘制出人像的轮廓。下面我们将深入探讨`SurfaceView`以及如何...
自定义SurfaceView时,我们可能需要创建一个新的线程,比如叫做`RenderThread`,在这个线程中执行所有的绘图操作。线程中会不断检查Surface是否准备好,如果准备好,就调用`Canvas`的`draw()`方法进行绘制。 2. **...
自定义SurfaceView是一种在Android应用开发中常见的技术,主要用于实现高性能的图形绘制和视频播放等需求。SurfaceView是Android系统提供的一个特殊的视图组件,它有自己的独立渲染线程,允许开发者在后台进行复杂的...
本示例中的“Android自定义SurfaceView——实现画板功能”旨在教你如何利用`SurfaceView`创建一个可以画画的应用。`SurfaceView`是Android系统提供的一种用于高效显示动态图像的视图组件,它拥有自己的渲染线程,...
在Android开发中,自定义视图是实现复杂动画和交互效果的重要手段,本示例将讲解如何使用`SurfaceView`来实现一个抽奖转盘的功能。`SurfaceView`是一种特殊的视图,它允许开发者进行高性能的图形操作,尤其适合处理...
SurfaceView是Android系统中一种特殊的View,主要用于在应用程序中实现高性能的图形绘制,例如视频播放、游戏场景等需要频繁更新视图内容的情况。它的工作原理是通过与底层硬件交互,直接在Surface上进行渲染,避免...
由于其拥有独立的绘图表面,因此SurfaceView的UI就可以在一个独立的线程中进行绘制。又由于SurfaceView不会占用主线程资源,一方面可以实现复杂而高效的UI,另一方面又不会导致用户输入得不到及时响应
通过理解其工作原理,创建自定义SurfaceView子类,以及在适当的线程中执行绘制操作,我们可以构建出流畅且响应迅速的应用界面。在实际项目中,还需要结合具体需求进行调整和优化,以达到最佳效果。
通常,我们会在`SurfaceView`的子类中创建一个后台线程,这个线程负责在`Surface`上绘制内容。 1. **创建自定义SurfaceView子类**: 创建一个新的Java类,继承自`SurfaceView`并实现`SurfaceHolder.Callback`接口...
2. **自定义SurfaceView子类**: 创建一个继承自SurfaceView的自定义类,重写其onDraw()方法。在这个方法里,我们将实现图片的绘制和缩放逻辑。 3. **图片加载与绘制**: 使用Bitmap对象加载图片,然后在onDraw()...
在onDraw()中,我们可以使用Canvas对象绘制一个圆形的裁剪路径,使得相机预览只显示在这个圆形区域内。 以下是关键步骤: 1. **创建自定义SurfaceView**:创建一个新的Java类,例如`CircleCameraPreview`,继承自`...
在Android开发中,`Path`和`SurfaceView`是两个重要的组件,它们分别用于图形绘制和高性能的视频或游戏画面渲染。在这个项目中,开发者尝试利用它们来创建一个有趣的八边形并可能添加一些文字或其他图形元素。让我们...
在Android开发中,自定义SurfaceView是实现高性能图形绘制的重要手段,尤其适用于实时视频、游戏等需要高效渲染的场景。本篇文章将详细讲解如何利用SurfaceView实现一个基本的画板功能。 首先,SurfaceView是...
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在单独的线程中进行高性能的图形绘制,常用于创建游戏、视频播放等需要高效更新画面的场景。本篇文章将深入探讨如何使用SurfaceView来创建一个简单的...
- **手动绘制**:在`SurfaceHolder.Callback`的`drawFrame`方法(或自定义的绘图方法)中,根据时间戳进行帧计算,然后调用`Canvas`的绘图方法绘制每一帧。通过控制绘图速度,可以实现平滑的动画效果。 - **使用 ...
**自定义SurfaceView的步骤** 1. **继承SurfaceView**:创建一个新的类,继承自`SurfaceView`,这样就可以直接使用`SurfaceView`的功能并进行扩展。 2. **实现SurfaceHolder.Callback**:通过实现`SurfaceHolder....
本主题将深入探讨如何在SurfaceView中实现透明且自定义的Dialog和Toast,以及相关的源码分析。 首先,我们来理解SurfaceView。SurfaceView是Android系统提供的一种用于在应用程序中显示复杂动画或视频内容的视图...
在这个demo中,开发者可以自定义这个框的样式,不仅限于简单的矩形,也可以是任何形状的图片。例如,你可以选择一个卡通化的边框,或者使用公司品牌的颜色和图案,以提升用户体验和品牌一致性。 4. **QualityDemo**...
综上,通过创建SurfaceView子类和自定义绘图线程,我们可以实现在Android应用中绘制并不断移动的圆形。SurfaceView的独立渲染线程特性使得这种动画绘制更加流畅,不会阻塞主线程,为用户带来更好的交互体验。在这个...
总的来说,这个压缩包包含的源码可能涵盖了自定义SurfaceView实现拍照的核心部分,但可能不包含完整的录像和录屏功能。对于初学者和开发者来说,通过研究这些代码可以深入理解Android多媒体框架,提升在实际项目中...