Android SurfaceView绘制组合图形

来源:互联网 发布:淘宝商城充气姓娃好吗 编辑:程序博客网 时间:2024/05/18 18:52

学习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



0 0