这里做了一个简单的组合图形的动画。
一 。 组合图形:
一个容器类,组合图形的容器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 stub
paint = new Paint();
paint.setColor(0xffe51c23);
}
@Override
public void childrenView(Canvas canvas) {
// TODO Auto-generated method stub
super.childrenView(canvas);
canvas.drawRect(0, 0, 100, 100, paint);
this.setX(this.getX()+15);
}
public class Circle extends Contanier{
private Paint paint = null;
public Circle() {
paint = new Paint();
paint.setColor(0xff9c27b0);
}
@Override
public 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);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public 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 stub
super.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() {
@Override
public 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>}