SurfaceView的操作类
来源:互联网 发布:mac版wifi破解软件 编辑:程序博客网 时间:2024/05/17 04:51
写一个类,继承SurfaceView,在其构造方法中,获取surfaceHolder,并得到SurfaceView的生命周期。在surfaceCreated方法里,开启绘制线程,在surfaceDestory方法里,关闭线程。在线程里,每隔50s绘制一次。绘制方法用try catch方法包起来,因为可能canvas会报空指针,在进入主屏幕的时候,或者线程没有停止,但SurfaceView已经关闭的情况下。
下面是代码
package com.example.roundprogressbar;import android.content.Context;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;public class MySurfaceView extends SurfaceView implements Callback, Runnable {private SurfaceHolder mSurfaceHolder;private Canvas mcCanvas;/** * 绘制线程 */private Thread mThread;/** * 线程是否在执行 */private boolean isRunning;public MySurfaceView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public MySurfaceView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);mSurfaceHolder = getHolder();mSurfaceHolder.addCallback(this);// 可获得焦点setFocusable(true);setFocusableInTouchMode(true);// 设置屏幕常亮setKeepScreenOn(true);}public MySurfaceView(Context context) {this(context, null, 0);}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// 在这里开启线程isRunning = true;mThread = new Thread(this);mThread.start();}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {isRunning = false;}@Overridepublic void run() {while (isRunning) {//每隔50ms绘制一次long startTime=System.currentTimeMillis();draw();long endTime=System.currentTimeMillis();if(endTime-startTime<50){try {Thread.sleep(50-(endTime-startTime));} catch (InterruptedException e) {e.printStackTrace();}}}}private void draw() {try {mcCanvas = mSurfaceHolder.lockCanvas();if (mcCanvas != null) {// 在这里进行绘制操作}} catch (Exception e) {e.printStackTrace();} finally {if (mcCanvas != null) {mSurfaceHolder.unlockCanvasAndPost(mcCanvas);}}}}
1 0
- SurfaceView的操作类
- surfaceview刷新操作的一些优化建议
- SurfaceView类的使用模板
- Android SurfaceView类的使用
- 【SurfaceView】SurfaceView的初步学习
- SurfaceView--扩展SurfaceView的基础模版代码
- android的surfaceView介绍
- SurfaceView的学习
- SurfaceView的基本使用
- Android的SurfaceView使用
- SurfaceView的基本使用
- 初学Android的surfaceView
- SurfaceView的简单使用
- 关于SurfaceView的问题
- SurfaceView的基本使用
- SurfaceView的时间
- SurfaceView的学习01
- surfaceView的简单介绍
- Yarn的JVM重用功能——uber
- Kernel.shmall和kernel.shmmax
- java调用c++
- UPS这么便宜卖,你信吗?
- Linux下搭建Android开发环境及Android真机调试
- SurfaceView的操作类
- 搞定NaN,靠这一篇就够了
- Mac Adobe CS6 完美破解激活(免替换文件/可更新)详细图文教程
- 代理模式Proxy Pattern
- Volley+Okhttp使用心得
- Spring MVC 框架搭建及详解
- Basic jpa and hibernate concepts
- 中午试打了Stiga的碳素145
- 学习封装双击返回键退出