Android SurfaceView 的学习(二)

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



一 。 组合图形:


一个容器类,组合图形的容器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>}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值