一个测试LCD的activity

        在生产安卓设备有时需要用到产生一个纯颜色变换的画面,来测试LCD是否有坏点。一个简单的实例如下,要用到SurfaceView,SurfaceHolder,canvas等图层处理:

(1)要import的文件

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

(2)主activity的定义
public class MainActivity extends Activity implements SurfaceHolder.Callback,所以类中要完成SurfaceHolder的接口函数

用到的变量

private boolean mTestOver;		//单次测试是否结束
	private boolean mainThreadExitFlag;		//线程结束标志
	private SurfaceHolder mSurfaceHolder = null;
	private SurfaceView mSurfaceView = null;
	private static final int UPDATE_MSG = 1;	//自定义消息

页面的onCreate内容

mainThreadExitFlag = false;
		mSurfaceView = (SurfaceView) findViewById(R.id.lcd_preview);
		SurfaceHolder holder = mSurfaceView.getHolder();
		holder.addCallback(this);		//绑定SurfaceView控件与SurfaceHolder
		mTestOver = false;

结束测试的函数

private void destroy(int res)//return with result
	{
		mainThreadExitFlag = true;		//
		Intent mIntent = new Intent();
		setResult(res, mIntent);
		finish();		//结束该activity。但是发现任务管理器中该apk仍然存在,线程没结束?
	}

需实现的三个接口函数

	public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
		mSurfaceHolder = arg0;
	}
	public void surfaceCreated(SurfaceHolder holder) {
		new Thread(new MyThread()).start();
	}
	public void surfaceDestroyed(SurfaceHolder holder) {
		mainThreadExitFlag = true;
		mSurfaceHolder = null;
	}

自定义消息的handler

	private Handler mHandler = new Handler(){
		public void handleMessage(Message msg){
			switch (msg.what){
			case UPDATE_MSG:
				mTestOver = true;		//一次完整测试结束
				destroy(1);
				break;
				default:
					super.handleMessage(msg);
			}
		}
	};

测试结束后发出的消息

	void update(){
		mHandler.removeMessages(UPDATE_MSG);
		mHandler.sendMessageDelayed(
				mHandler.obtainMessage(UPDATE_MSG), 0);
	}

测试过程的主线程

class MyThread implements Runnable{
		void LcdDelay(){
			try {					
			   Thread.sleep(1000);	//每种颜色延时1秒
			} catch (InterruptedException e) {	
			   e.printStackTrace();  
			}
		}
		
		void DrawColor(Paint mpaint, int color){	
			DisplayMetrics displayMetrics = new DisplayMetrics();
			getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
			int height = displayMetrics.heightPixels;
			int width = displayMetrics.widthPixels;	//获得当前LCD的宽高
			if(mSurfaceHolder == null){
				return;
			}
			Canvas canvas = mSurfaceHolder.lockCanvas(null);
			mpaint.setColor(color);
			canvas.drawRect(new RectF(0,0,width,height), mpaint);	//在画布上以特定颜色画矩形

			if(mSurfaceHolder != null){
				mSurfaceHolder.unlockCanvasAndPost(canvas);	//刷屏	
			}else{
				return;
			}
		}
		
		@Override
		public void run() {	
			Paint mPaint = new Paint();
			if(mainThreadExitFlag){	//如果中间有线程退出标志被置,退出当前线程
				mTestOver = true;
				return;
			}
			DrawColor(mPaint, Color.RED);	//分别刷各种颜色
			if(mainThreadExitFlag){
				mTestOver = true;
				return;
			}
			LcdDelay();
			if(mainThreadExitFlag){
				mTestOver = true;
				return;
			}
			DrawColor(mPaint, Color.BLUE);
			if(mainThreadExitFlag){
				mTestOver = true;
				return;
			}
			LcdDelay();
			if(mainThreadExitFlag){
				mTestOver = true;
				return;
			}
			DrawColor(mPaint, Color.GREEN);
			if(mainThreadExitFlag){
				mTestOver = true;
				return;
			}
			LcdDelay();
			if(mainThreadExitFlag){
				mTestOver = true;
				return;
			}
			DrawColor(mPaint, Color.WHITE);
			if(mainThreadExitFlag){
				mTestOver = true;
				return;
			}
			LcdDelay();
			if(mainThreadExitFlag){
				mTestOver = true;
				return;
			}
			DrawColor(mPaint, Color.BLACK);
			if(mainThreadExitFlag){
				mTestOver = true;
				return;
			}
			LcdDelay();
			if(mainThreadExitFlag){
				mTestOver = true;
				return;
			}
			update();		//发出UPDATE消息,可以重新测试一次,也可以退出当前
		}
		
	}

       上述APK运行后就可以产生纯色变换的画面

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值