Android UI SurfaceView的使用-绘制组合图型,并使其移动

来源:互联网 发布:mac抹掉进程失败 编辑:程序博客网 时间:2024/05/16 11:53

绘制容器类:

//图形绘制容器public class Contanier {private List<Contanier> list;private float x=0,y=0;public Contanier(){list=new ArrayList<Contanier>();}public void draw(Canvas canvas){canvas.save();canvas.translate(getX(), getY());childrenDraw(canvas);for(Contanier c : list){c.draw(canvas);}canvas.restore();}public void childrenDraw(Canvas canvas){}public void addChildren(Contanier child){list.add(child);}public void removeChildren(Contanier child){list.remove(child);}public float getX() {return x;}public void setX(float x) {this.x = x;}public float getY() {return y;}public void setY(float y) {this.y = y;}}

绘制正方型类:

//绘制正方型public class Rect extends Contanier {private Paint paint;public Rect(){paint=new Paint();paint.setColor(Color.RED);}@Overridepublic void childrenDraw(Canvas canvas) {super.childrenDraw(canvas);canvas.drawRect(0, 0, 100, 100, paint);this.setY(getY()+1);}}
 绘制圆:

//绘制圆public class Circle extends Contanier {private Paint paint;public Circle(){paint=new Paint();paint.setColor(Color.BLUE);}@Overridepublic void childrenDraw(Canvas canvas) {super.childrenDraw(canvas);canvas.drawCircle(50, 50, 50, paint);}}
绘制类:

public class GameView extends SurfaceView implements Callback{private Contanier contaier;private Rect rect;private Circle circle;public GameView(Context context) {super(context);contaier=new Contanier();rect=new Rect();circle=new Circle();rect.addChildren(circle);contaier.addChildren(rect);getHolder().addCallback(this);}private void draw(){Canvas canvas=getHolder().lockCanvas();canvas.drawColor(Color.WHITE);contaier.draw(canvas);getHolder().unlockCanvasAndPost(canvas);}private Timer timer=null;private TimerTask task=null;//开始后让其根据Y轴进行移动private void startTimer(){timer=new Timer();task=new TimerTask() {@Overridepublic void run() {draw();}};timer.schedule(task, 100,100);}private void stopTimer(){if(timer!=null){timer.cancel();timer=null;}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}@Overridepublic void surfaceCreated(SurfaceHolder holder) {startTimer();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {stopTimer();}}


MainActivity:

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

效果:




0 0