您的位置:首页 > 移动开发 > Android开发

Android SurfaceView 的学习(二)

2016-04-19 08:38 375 查看
这里做了一个简单的组合图形的动画。一 。 组合图形:一个容器类,组合图形的容器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);

}
一个圆形类Circle:
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>}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: