Android SurfaceView 初识
1.SurfaceView 背景透明
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//SurfaceView 透明背景MSurfaceView sv = (MSurfaceView) findViewById(R.id.sv);sv.setZOrderOnTop(true);//必须在布局初始化完成后设置sv.getHolder().setFormat(PixelFormat.TRANSPARENT);}
}
2.SurfaceView 清屏
int i;@Overridepublic void run() {try {Canvas canvas = mHolder.lockCanvas();//SurfaceView 清屏canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);i++;Log.i(TAG, "C1=" + canvas.hashCode() + ",n=" + canvas.getClass().getName());canvas.drawText(""+i,getWidth() * 0.5f, getHeight() * 0.5f, paint);mHolder.unlockCanvasAndPost(canvas);postDelayed(this, 500);}catch (Exception e){Log.e(TAG,"run-ex="+e.getMessage());}}
3.SurfaceView 的 onDraw 方法 生效
@Overridepublic void surfaceCreated(@NonNull SurfaceHolder holder) {//SurfaceView 的 onDraw 方法生效setWillNotDraw(false);new Thread(this).start();}
简单代码实现
package cn.find;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;import androidx.annotation.NonNull;public class MSurfaceView extends SurfaceView implements Runnable, SurfaceHolder.Callback {private final String TAG = this.getClass().getName();private final SurfaceHolder mHolder;Paint paint = new Paint();public MSurfaceView(Context context) {this(context, null);Log.i(TAG, "111");}public MSurfaceView(Context context, AttributeSet attrs) {this(context, attrs, 0);Log.i(TAG, "222");}public MSurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);Log.i(TAG, "333");mHolder = getHolder();mHolder.addCallback(this);paint.setAntiAlias(true);paint.setTextSize(80);paint.setColor(Color.WHITE);}int j;@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);j++;Log.i(TAG, "C2=" + canvas.hashCode() + ",n=" + canvas.getClass().getName());//绘制 数字canvas.drawText("C2:"+j,getWidth() * 0.5f, getHeight() * 0.8f, paint);//定时 500 毫秒 刷新postInvalidateDelayed(500);}@Overridepublic void surfaceCreated(@NonNull SurfaceHolder holder) {//SurfaceView 的 onDraw 方法生效setWillNotDraw(false);//开启绘制线程new Thread(this).start();}@Overridepublic void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(@NonNull SurfaceHolder holder) {}int i;@Overridepublic void run() {try {Canvas canvas = mHolder.lockCanvas();//SurfaceView 清屏(不清屏,绘制图像会重叠在一起)canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);i++;Log.i(TAG, "C1=" + canvas.hashCode() + ",n=" + canvas.getClass().getName());//绘制 数字canvas.drawText("C1:"+i,getWidth() * 0.5f, getHeight() * 0.5f, paint);mHolder.unlockCanvasAndPost(canvas);postDelayed(this, 500);}catch (Exception e){Log.e(TAG,"run-ex="+e.getMessage());}}
}
Android SurfaceView 初识相关推荐
- 详解与重构hyman《Android SurfaceView实战 打造抽奖转盘》
详解与重构hyman<Android SurfaceView实战 打造抽奖转盘> 作者:邵励治 一.概述--关于SurfaceView您不得不知道的二三事 1.SurfaceView是干什 ...
- Android SurfaceView实战 带你玩转flabby bird (下)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43063331,本文出自:[张鸿洋的博客] 1.概述 在Android Surfa ...
- Android SurfaceView实战 带你玩转flabby bird (上)
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 转载请标 ...
- Android SurfaceView实战 带你玩转flabby bird
分析 仔细观察游戏,需要绘制的有:背景.地板.鸟.管道.分数: 游戏开始时: 地板给人一种想左移动的感觉: 管道与地板同样的速度向左移动: 鸟默认下落: 当用户touch屏幕时,鸟上升一段距离后,下落 ...
- Android SurfaceView简例
Android SurfaceView简例 Android中各的SurfaceView和View有很大的不同,两者应用场景不同.大多数View能做的事情SurfaceView也可以,但是Surface ...
- Android SurfaceView 的应用
SurfaceView 由于可以直接从内存或者DMA等硬件接口取得图像数据,因此是个非常重要的绘图容器,网上介绍 SurfaceView的用法有很多,写法也层出不同,例如继承SurfaceView类, ...
- android屏幕底部黑块,Android surfaceView 黑块问题
很多Android机上会出现surfaceView结束播放后,出现概率的黑块,典型的解决方案 setZOrderMediaOverlay(false); setZorderTop(false); /* ...
- android SurfaceView
为什么80%的码农都做不了架构师?>>> 参考:http://blog.csdn.net/luoshengyang/article/details/8661317/ 参考:ht ...
- Android SurfaceView的生命周期
本文利用SurfaceView来实现视频的播放 本文地址:http://www.cnblogs.com/wuyudong/p/5851156.html,转载请注明源地址. 在main.xml布局文件添 ...
最新文章
- Nginx 挂了怎么办?怎么实现高可用?
- pytorch 查看模型参数,查看模型特定层输入输出,模型结构图绘制总结
- Gym - 101981I-MagicPotion-最大流
- 第一章 Linux是什么
- 如何将多个PDF合成为一个PDF,并且大小统一?
- PHP异步调用实现方式
- 竖屏小游戏--喵星战争源代码分析【完整】
- 数理统计-随机变量的数字特征:期望、方差、协方差、矩、协方差矩阵
- 小马Win7永久激活工具—OemY3.1 NT6通用完美激活
- 手把手教你使用Python提取快递信息
- 进制转换的算法及进制在线转换器
- centos启动停留在started GNOME display manager
- Application Loader上传app,一直卡在“正在通过 App Store 进行鉴定”
- 2019「友盟杯」数据分析大赛结果公布
- 什么是SaaS? 定义软件即服务
- 3D动态烟花--HTML
- webots仿真车轮打滑问题解决
- 湖盟知识—***、病毒、防火墙
- 查看windows文件名的编码
- 如何用迅雷或QQ旋风下载百度云上的资源?