您的位置:首页 > 移动开发 > Android开发

android学习之surfaceview

2016-04-20 20:33 246 查看
今天因为下午编程太累了,就想总结一下之前了解过的surfaceview,结果,唉,运行的结果总是在意料之外,好在最后终于调试好了,还是贴代码吧,感觉代码和注解才是真爱

package com.jk.surfaceview;

import java.util.Random;

import android.R.color;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

public class MySurface extends SurfaceView {
//declare a surfaceHolder object
SurfaceHolder holder;

public MySurface(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
//get a holder
holder = getHolder();
//add a callback event
holder.addCallback(new Callback() {
RenderThread render;

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// let the thread dead
render.isrun = false;
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
//init a thread and start the thread
render = new RenderThread();
render.isrun = true;
render.start();
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
// TODO Auto-generated method stub

}
});
}

public MySurface(Context context, AttributeSet attrs) {
this(context, attrs, 0);
// TODO Auto-generated constructor stub
}

public MySurface(Context context) {
this(context, null);
// TODO Auto-generated constructor stub
}

public void hua(Canvas canvas) {
//full the canvas
canvas.drawARGB(255, 255, 0,0 );
Paint paint=new Paint();
//draw a rect
canvas.drawRect(1, 1, 100, 100, paint);
}

class RenderThread extends Thread {
//set the isrun is false
public boolean isrun = false;

@Override
public void run() {
super.run();
while (isrun) {
//though the holder to lock the canvas
Canvas canvas = holder.lockCanvas();
//begin to draw
hua(canvas);
//unlock the canvas and post the content
holder.unlockCanvasAndPost(canvas);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}

}


然后,这个的用法就和view的用法一样。。。可以回去休息了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: