Android SurfaceView 笔记

本文深入探讨SurfaceView的实现原理及关键应用技巧,包括构造方法、回调接口实现、屏幕触控与布局处理、绘制方法区别与效率提升等要点,帮助开发者掌握SurfaceView在复杂界面渲染中的高效利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

SurfaceView 是一个继承了View但是由于一般的View有这很大区别的类.

 

这是由于 SurfaceView 的绘制方法和原来的View不同.在 View 中系统不允许主线程外的线程控制 UI .但是 SurfaceView 却可以 .下面是我总结的几个要点:

1. 首先需要实现 View 的构造方法.( 如果  需要在XML 文件中布局需要实现public S(Context context, AttributeSet attrs)  这个构造方法 )

2. 由于需要对SurfaceView 进行监控所以需要实现 SurfaceHolder.Callback 这个接口( 可以用内部类或者方法实现.) 这个接口需要实现三个方法:

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}  //大小改变的时候被调用到.

public void surfaceCreated(SurfaceHolder holder) {} // 创建的时候被调用到

public void surfaceDestroyed(SurfaceHolder holder) {} //销毁的时候被调用

3.在SurfaceView 中屏幕接触处理和 布局处理和View一样.

4. 使用绘制的时候和 View 完全不一样.他是使用 SufaceHodler 的方法

public canvas holder.lockCanvas();

public void unlockCanvasAndPost(canvas);

第一个方法可以调用出一个Canvas 画布.在上面绘制所需的画面.然后调用第二个方法.这样就可以在屏幕上面绘制出来的.

View中的 invalidate()方法需要在主线程中调用(postInvalidate()不同).但是 SurfaceView不需要.SurfaceView绘制效率比View高.

5.SurfaceView中如果需要请求重新布局同样使用 requestLayout();

6. 和View一样重要的一些方法:onMeasure(int ,int); 是使用 View 前需要调用的方法. 通知View进行自身尺寸测量.

如果自己重写的话测量完自身大小注意需要调用setMeasuredDimension(int, int);这个方法设置控件大小.

onLayout(boolean,int,int,int,int); 这个方法使父控件具体分配给当前View的具体位置的方法.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值