Android SurfaceView 的学习(二)

来源:互联网 发布:细说php完整版精要版 编辑:程序博客网 时间:2024/05/19 20:40

这里做了一个简单的组合图形的动画。



一 。 组合图形:


一个容器类,组合图形的容器Contanier:

public class Contanier { private List<Contanier> children = null; private float x=1,y=1;public Contanier() {children = new ArrayList<Contanier>();}public void draw(Canvas canvas) {canvas.save();canvas.rotate(getX(), 50,50);childrenView(canvas);for (Contanier i : children) {i.draw(canvas);}canvas.restore();}public void childrenView(Canvas canvas) {// TODO Auto-generated method stub}public void addchild(Contanier child) {children.add(child);}public void removechild(Contanier child) {children.remove(child);}


一个方块类Rect:

public class Rect extends Contanier {private Paint paint = null;public Rect() {// TODO Auto-generated constructor stubpaint = new Paint();paint.setColor(0xffe51c23);}@Overridepublic void childrenView(Canvas canvas) {// TODO Auto-generated method stubsuper.childrenView(canvas);canvas.drawRect(0, 0, 100, 100, paint);this.setX(this.getX()+15);}




一个圆形类Circle:
public class Circle extends Contanier{private Paint paint = null;public Circle() {paint = new Paint();paint.setColor(0xff9c27b0);}@Overridepublic void childrenView(Canvas canvas) {super.childrenView(canvas);canvas.drawCircle(50, 50, 50, paint);}}


然后SurfaceView类 GameView:

public class GameView extends SurfaceView implements Callback {
        private Contanier contanier;private Rect rect;private Circle circle;private Timer timer;private TimerTask task;public GameView(Context context) {super(context);getHolder().addCallback(this);contanier = new Contanier();rect=new Rect();circle= new Circle();rect.addchild(circle);contanier.addchild(rect);}private void draw() {Canvas canvas = getHolder().lockCanvas();canvas.drawColor(0xff5677fc);contanier.draw(canvas);getHolder().unlockCanvasAndPost(canvas);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceCreated(SurfaceHolder holder) {<pre name="code" class="java">                draw();
}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}}




这里是就完成了方块中套圆的组合图形。






二。动画(rotate旋转)


1,contanier

public void draw(Canvas canvas) {canvas.save();canvas.rotate(getX(), 50,50);  //旋转childrenView(canvas);for (Contanier i : children) {i.draw(canvas);}canvas.restore();}

2,rect

public void childrenView(Canvas canvas) {// TODO Auto-generated method stubsuper.childrenView(canvas);canvas.drawRect(0, 0, 100, 100, paint);this.setX(this.getX()+15);}

3,,gemeview

      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;}}
public void surfaceCreated(SurfaceHolder holder) {<span style="white-space:pre"></span>startTimer();<span style="white-space:pre"></span>}<span style="white-space:pre"></span>@Override<span style="white-space:pre"></span>public void surfaceDestroyed(SurfaceHolder holder) {<span style="white-space:pre"></span>stoptimer();<span style="white-space:pre"></span>}






0 0
原创粉丝点击