为了在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));    }


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

更多相关文章

  1. RxJava RxAndroid(安卓)在android中最重要的应用(一)
  2. java android HTTP应用程序设计
  3. Android定时器和Handler用法实例分析
  4. Mms模块ConversationList流程分析
  5. Android(安卓)application对象的使用 全局变量
  6. android上如何写配置文件
  7. Android(安卓)实现 Launcher
  8. Android(安卓)Studio OkHttpClient使用教程详解
  9. android画图----ShapeDrawable和shader

随机推荐

  1. Android V1及V2签名原理简析
  2. AIDL-AndRoid接口描述语言实现跨进程通讯
  3. Android Studio(五)使用布局编辑器
  4. 昨日的面试题
  5. 自定义PopupWindow的实现
  6. Android技巧小结之新旧版本Notification
  7. Android仿IOS上拉下拉弹性效果的实例代码
  8. Android仿人人客户端(v5.7.1)——对从服务
  9. android中的事件传递和处理机制
  10. 【Android初学者】框架布局:仿微信页面制