读书人

在自定义的SurfaceView中作图内容

发布时间: 2013-10-31 12:03:52 作者: rapoo

在自定义的SurfaceView中绘制内容

View和SurfaceView都可以用于绘制图形,但各有各的适用场合。一般情况,主动更新,不考虑UI线程的限制,双缓存加速等情况下会优先考虑SurfaceView。

下面把上篇中的MyView通过继承SurfaceView来重新编写,具体如下:

?

public class MyView extends SurfaceView implements Callback, Runnable {private Paint mPaint;private SurfaceHolder mSurfaceHolder;private Thread mThread;private void initial() {mPaint = new Paint();  mPaint.setAntiAlias(true);        this.setKeepScreenOn(true);        mPaint.setColor(Color.RED);                  mThread = new Thread(this);                mSurfaceHolder = getHolder();        mSurfaceHolder.addCallback(this);        }public MyView(Context context) {super(context);initial();}public MyView(Context context, AttributeSet attrs) {super(context, attrs);initial();}private void draw() {Canvas mCanvas = null;try {mCanvas = mSurfaceHolder.lockCanvas();mCanvas.drawColor(Color.WHITE);mCanvas.drawText("绘制文字", 10, 20, mPaint);mCanvas.drawCircle(35, 50, 20, mPaint);} catch (Exception e) {e.printStackTrace();} finally {if (mCanvas != null) {mSurfaceHolder.unlockCanvasAndPost(mCanvas);}}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}@Overridepublic void surfaceCreated(SurfaceHolder holder) {mThread.start();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}@Overridepublic void run() {draw();}}

?说明:

?

    获取SurfaceHolder:mSurfaceHolder = getHolder();为SurfaceHolder添加CallBack:mSurfaceHolder.addCallback(this);创建绘制线程:mThread = new Thread(this);绘制函数:draw();自定义的函数名称,如果你喜欢,你可以在遵守规则的前提下随意命名;当SurfaceView被创建时,启动绘制线程:mThread.start();从SurfaceHolder获得Canvas对象:mCanvas = mSurfaceHolder.lockCanvas();

调用方式和以前一样,这也仅仅是一个View,只不过是继承SurfaceView而已!

效果如图:


在自定义的SurfaceView中作图内容
希望对你有所帮助!:)

?

读书人网 >移动开发

热点推荐