SurfaceView的简单使用

  1 package com.example.administrator.mystudent.surfaceView;
  2
  3 import android.content.Context;
  4 import android.graphics.Canvas;
  5 import android.graphics.Color;
  6 import android.graphics.Paint;
  7 import android.graphics.Rect;
  8 import android.util.AttributeSet;
  9 import android.view.SurfaceHolder;
 10 import android.view.SurfaceView;
 11
 12 /**
 13  * Created by Administrator on 2016/9/13.
 14  */
 15 public class TestSufaceView extends SurfaceView implements SurfaceHolder.Callback {
 16
 17     private SurfaceHolder holder;
 18     private MyThread myThread;
 19
 20     public TestSufaceView(Context context) {
 21         super(context, null);
 22     }
 23
 24     public TestSufaceView(Context context, AttributeSet attrs) {
 25         super(context, attrs);
 26
 27         holder = this.getHolder();
 28         holder.addCallback(this);
 29         myThread = new MyThread(holder);//创建一个绘图线程
 30
 31     }
 32
 33
 34     /**
 35      * @param holder 在创建时激发,一般在这里调用画图的线程
 36      */
 37     @Override
 38     public void surfaceCreated(SurfaceHolder holder) {
 39
 40         myThread.isRun = true;
 41         myThread.start();
 42     }
 43
 44     /**
 45      * @param holder
 46      * @param format
 47      * @param width
 48      * @param height 在surface的大小发生改变时激发
 49      */
 50     @Override
 51     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
 52
 53     }
 54
 55     /**
 56      * @param holder 销毁时激发,一般在这里将画图的线程停止、释放
 57      */
 58     @Override
 59     public void surfaceDestroyed(SurfaceHolder holder) {
 60
 61         myThread.isRun = false;
 62     }
 63
 64     //线程内部类
 65     class MyThread extends Thread {
 66         private SurfaceHolder holder;
 67         public boolean isRun;
 68
 69         public MyThread(SurfaceHolder holder) {
 70             this.holder = holder;
 71             isRun = true;
 72         }
 73
 74         @Override
 75         public void run() {
 76             int count = 0;
 77             while (isRun) {
 78                 Canvas c = null;
 79                 try {
 80                     synchronized (holder) {
 81                         c = holder.lockCanvas();//锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面画图等操作了。
 82                         c.drawColor(Color.BLACK);//设置画布背景颜色
 83                         Paint p = new Paint(); //创建画笔
 84                         p.setColor(Color.WHITE);
 85                         Rect r = new Rect(100, 50, 300, 250);
 86                         c.drawRect(r, p);
 87                         c.drawText("这是第" + (count++) + "秒", 100, 310, p);
 88                         Thread.sleep(1000);//睡眠时间为1秒
 89                     }
 90                 }
 91                 catch(Exception e){
 92                     e.printStackTrace();
 93                     } finally
 94                 {
 95                     if (c != null)
 96                     {
 97                         holder.unlockCanvasAndPost(c);//结束锁定画图,并提交改变。
 98                         }
 99                     }
100                 }
101             }
102
103     }
104 }
时间: 2024-12-08 14:23:40

SurfaceView的简单使用的相关文章

Android 游戏开发之SurfaceView的简单使用

参考资料:          Android游戏编程之从零开始   涉及的相关知识点: 1.Callback    一个SurfaceView一定要实现一个SurfaceHolder.Callback接口.以便在底层的Surface状态发生变化的时候通知View,该接口需要实现以下3个方法:    public void surfaceCreated(SurfaceHolder holder) {}    public void surfaceChanged(SurfaceHolder hold

Android学习之界面篇(九)SurfaceView简单学习

知识点: surfaceview介绍 surfaceview与View的区别,surface与surfaceview的区别 实例创建与使用 SurfaceHolder.Callback的使用,surfaceHolder可以看作是surfaceview的控制器,控制图形的大小,像素等. 在主函数中回调函数的使用getHolder.addCallback(this) canvas的锁定与解锁,绘制图形之前锁定画布,绘制结束之后解锁画布. canvas的save与restore, canvas画布的各

视频播放相关内容总结

视频播放相关内容总结 多媒体常识: 什么是多媒体 多媒体是计算机和视频技术的结合,实际上它是两个媒体:声音和图像,或者用现在的术语:音响和电视 常用的视频格式 Android系统默认:mp4.3gp 常用格式:ts.3gpp.3g2.3gpp2.avi.mkv.flv.divx.f4v.rm.rmvb.rv.wmv.asf.mov.mpg.v8.ram.mpeg. swf.m2v.asx.ra.ram.ndivx.xvid等 常用音频格式: Android系统:mp3.ogg: 常用格式:wma

Android之绘图

一直对画画相关不感冒,但是Android的绘图机制还是要硬着头皮学 绘画主要是使用paint(画笔)在canvas(画布)进行各种图形的绘制,画矩形.圆.三角形等点线构成的2维图形 //矩形 drawRect (float left, float top, float right, float bottom, Paint paint) canvas.drawRect(50, 100, 200, 200, paint); //圆 drawCircle (float cx, float cy, fl

Android用SurfaceView写一个简单有趣的游戏--《数字组合》之一

最近突然有了一个想法--做一款android的简单游戏练练手,既要实现起来简单(毕竟只有一个人,框架什么的暂且就不用考虑了),又要能够达到对android知识框架的复习和游戏要有可玩性,终于用了几个星期写完了.和大家分享分享体会吧. 本来打算写一个专栏的.看以后的时间吧. 首先介绍一下游戏的主要思想和SurfaceView也就是游戏主界面的代码分享,后续部分再更新吧. 在点击 开始游戏 后,进行组合数字的选择,根据难易程度系统默认选择2和8,选择界面中间显示选择的组合数字,第一个数字表示第一个组

SurfaceView简单框架

简介 可以直接从内存或者DMA等硬件接口取得图像数据,是个非常重要的绘图容器. 它的特性是:可以在子线程向屏幕上绘图.这样可以避免画图任务繁重的时候造成主线程阻塞,从而提高了程序的反应速度. 实现过程 继承SurfaceView实现SurfaceView.Callback接口,实现接口中方法管理Surface生命周期. SurfaceView.getHolder()获得SurfaceHolder对象,是Surface的控制器. SurfaceHolder.addCallback(callback

基于android平台的模拟血压计实现(surfaceView的熟练使用)

这个是我根据上一篇文章的温度计改的血压计,因为客户对温度计还有血压计的需求是一样的,所以,我就选择了偷懒,直接用温度计的代码改了一概,就成了血压计的了 1 package com.example.test; 2 3 4 5 import android.content.Context; 6 import android.graphics.Bitmap; 7 import android.graphics.Canvas; 8 import android.graphics.Color; 9 imp

Android自定义组件系列【12】——非UI线程绘图SurfaceView

一.SurfaceView的介绍 在前面我们已经会自定义View,使用canvas绘图,但是View的绘图机制存在一些缺陷. 1.View缺乏双缓冲机制. 2.程序必须重绘整个View上显示的图片,比较耗资源. 3.非UI线程无法更新View组件,所以会占用主线程资源,当需要在主线程中处理逻辑的时候会很慢. 在Android中为我们提供了一个SurfaceView来替代View实现绘制图形,一般在游戏绘图方面应用较广,所以如果是比较复杂的绘图建议使用SurfaceView. 二.SurfaceV

SurfaceView的基本使用

一.引入: Android提供了View来进行绘图处理,在大部分情况下,View都能满足绘图需求.大家都知道View是通过刷新来重绘视图,Android系统通过发出VSYNC信号来进行屏幕的重绘,刷新的间隔时间为16ms.如果在16ms内View完成了你所需要执行的所有操作,那么用户在视觉上,就不会产生卡顿的感觉:反之,如果操作的逻辑过多时,就会掉帧从而使得用户感觉到卡顿.特别的需要频繁刷新的界面上,如游戏(60FPS以上),就会不断阻塞主线程,从而导致界面卡顿.而Android提供了Surfa