学习SurfaceView绘制组合图形的一个案例:
1.首先创建一个容器Contanier:
public class Contanier {
private List<Contanier> children = null;
private float x = 0, y = 0;
public Contanier() {
children = new ArrayList<Contanier>();
}
public void draw(Canvas canvas) {
canvas.save();
canvas.translate(getX(), getY());
ChildrenView(canvas);
for (Contanier c : children) {
c.draw(canvas);
}
canvas.restore();
}
public void ChildrenView(Canvas canvas) {
}
public void addChildrenView(Contanier child) {
children.add(child);
}
public void removeChildrenView(Contanier child) {
children.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;
}
}
2.创建要组合的两个子图形Rect和Circle
public class Rect extends Contanier {
private Paint paint = null;
public Rect() {
paint = new Paint();
paint.setColor(Color.BLUE);
}
@Override
public void ChildrenView(Canvas canvas) {
super.ChildrenView(canvas);
canvas.drawRect(0, 0, 100, 100, paint);
this.setX(this.getX() + 1);
}
}
public class Circle extends Contanier {
private Paint paint = null;
public Circle() {
paint = new Paint();
paint.setColor(Color.RED);
}
@Override
public void ChildrenView(Canvas canvas) {
super.ChildrenView(canvas);
canvas.drawCircle(50, 50, 50, paint);
}
}
3.创建一个类并继承SurfaceView实现Callback接口
public class MyView extends SurfaceView implements Callback {
private Contanier contanier;
private Rect rect;
private Circle circle;
private Timer timer = null;
private TimerTask timerTask = null;
public MyView(Context context) {
super(context);
contanier = new Contanier();
rect = new Rect();
circle = new Circle();
rect.addChildrenView(circle);
contanier.addChildrenView(rect);
getHolder().addCallback(this);
}
public void draw() {
Canvas canvas = getHolder().lockCanvas();
canvas.drawColor(Color.WHITE);
contanier.draw(canvas);
getHolder().unlockCanvasAndPost(canvas);
}
public void startTimer() {
timer = new Timer();
timerTask = new TimerTask() {
@Override
public void run() {
draw();
}
};
timer.schedule(timerTask, 100, 100);
}
public void stopTimer() {
if (timer != null) {
timer.cancel();
timer = null;
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
startTimer();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
stopTimer();
}
}
4.mainActivity中使用:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(this));
}
}
Demo地址:http://download.csdn.net/detail/qq_26323183/8772439