android 在surfaceView上画图

浏览:
字体:
发布时间:2013-12-22 23:48:39
来源:东方联盟

为了在SurfaceView上画图,我们定义一个MySurfaceView类,该类继承SurfaceView并且实现SurfaceHolder.Callback接口。在surfaceCreated方法中我们启动一个线程,在该线程中实现对画布canvas的操作。

import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;/** *  * @author xu duzhou * */public class Mysurfaceview extends SurfaceView implements Callback {    SurfaceHolder holder;    MysurfaceviewThread mysurfaceviewThread;    public Mysurfaceview(Context context) {        super(context);        // TODO Auto-generated constructor stub        holder = getHolder();//获取SurfaceHolder对象,同时指定callback        holder.addCallback(this);    }    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {        // TODO Auto-generated method stub    }        @Override    public void surfaceCreated(SurfaceHolder holder) {        // 当SurfaceView被创建时,将画图Thread启动起来。        mysurfaceviewThread = new MysurfaceviewThread();        mysurfaceviewThread.start();    }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {        // 当SurfaceView被销毁时,释放资源。        if (mysurfaceviewThread != null) {            mysurfaceviewThread.exit();            mysurfaceviewThread = null;        }    }    /**     * 内部类 MysurfaceviewThread,该类主要实现对canvas的具体操作。     * @author xu duzhou     *     */    class MysurfaceviewThread extends Thread {        private boolean done = false;        public MysurfaceviewThread() {            super();            this.done = false;        }        public void exit() {            // 将done设置为true 使线程中的while循环结束。            done = true;            try {                join();            } catch (Exception e) {                // TODO: handle exception            }        }        @Override        public void run() {            // TODO Auto-generated method stub            super.run();            SurfaceHolder surfaceHolder = holder;            int i = 1;            int j = 0;            while (!done) {                if (i > j) {                    j = i;                    i++;                } else {                    j = i;                    i--;                }                synchronized (surfaceHolder) {                    //锁定canvas                    Canvas canvas = surfaceHolder.lockCanvas();                    //canvas 执行一系列画的动作                    canvas.drawColor(Color.BLACK);                    Bitmap _bit = BitmapFactory.decodeResource(getResources(),                            R.drawable.ic_launcher);                    canvas.drawBitmap(_bit, 10 + i, 10 + i, null);//使用默认的Paint对象                    //释放canvas对象,并发送到SurfaceView                    surfaceHolder.unlockCanvasAndPost(canvas);                }                if (i == 100) {                    j = i;                }                if (i == 1) {                    j = 0;                }            }        }    }}


在activity使用该SurfaceView

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new Mysurfaceview(this));    }


程序运行结果就是 图片来回的运动如下图:

>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 下载 | 关于东盟 | 安全雇佣 | 搞笑视频大全 | 微信学院 |
关于我们 | 联系我们 | 广告服务 | 人才招聘 | 服务条款 | 免责申明 | 帮助中心 | 作品发布 | 网站地图 | 技术培训
Copyright © 2007 - 2018 Vm888.Com. All Rights Reserved
东方联盟 版权所有