Android的SurfaceView绘图并移动

来源:互联网 发布:2017高仿耐克淘宝店 编辑:程序博客网 时间:2024/05/02 04:34

 

import android.app.Activity;import android.content.Context;import android.graphics.*;import android.os.Bundle;import android.view.*;public class Mian extends Activity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        MyView my=new MyView(this);        setContentView(my);    }}class MyView extends SurfaceView implements SurfaceHolder.Callback,Runnable{    SurfaceHolder holder;    Rect rect;//创建类    public MyView(Context context)    {        super(context);        holder = this.getHolder();//获取SurfaceHolder对象实例          holder.addCallback(this);//添加callback接口        setFocusable(true);         rect=new Rect(150, 150);        Thread t=new Thread(rect);        t.start();    }    @Override  //当SurfaceView尺寸改变时调用    public void surfaceChanged(SurfaceHolder holder, int format, int width,int height){}    @Override  //当SurfaceView创建时调用    public void surfaceCreated(SurfaceHolder holder)    {        new Thread(this).start();//启动新的线程    }  //当SurfaceView销毁时调用    @Override    public void surfaceDestroyed(SurfaceHolder holder){}@Overridepublic synchronized void  run() {// TODO Auto-generated method stubwhile(true){Canvas canvas = holder.lockCanvas(null);//SurfaceHolder锁定并获得canvas对象 canvas.drawColor(Color.WHITE);this.drawGraphics(canvas);        holder.unlockCanvasAndPost(canvas);//解锁画布,提交画好的图像          try {Thread.sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public void drawGraphics(Canvas canvas){Paint mPaint = new Paint();        mPaint.setStyle(Paint.Style.FILL);//设置为实心        mPaint.setColor(Color.RED);        mPaint.setAntiAlias(true);//设置抗锯齿        this.draw(canvas, mPaint);}public void draw(Canvas canvas,Paint p){canvas.drawCircle(100, rect.y, 50, p);//画圆 }}class Rect implements Runnable{//矩形类int x;int y;int speed=10;public Rect(int x,int y){this.x=x;this.y=y;}@Overridepublic void run() {// TODO Auto-generated method stubwhile(true){y+=speed;try {Thread.sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

原创粉丝点击