surfaceView

MainActivity.java

package com.example.surfacev;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//      setContentView(R.layout.activity_main);
        setContentView(new MySView(this));
    }
}
MySView.java

package com.example.surfacev;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class MySView extends SurfaceView implements SurfaceHolder.Callback{

	private Paint paint = null;//画笔1
	private Contanier contanier;
	private Rect rect;
	private Circle circle;
	
	public MySView(Context context) {
		super(context);
		
		contanier = new Contanier();
		rect = new Rect();//矩形 rect
		circle = new Circle();//圆 circle
		paint = new Paint();//实例化画笔2
		paint.setColor(Color.RED);
		
		rect.addChildrenView(circle);  //圆添加到rect中
		contanier.addChildrenView(rect);//rect添加到容器中
		
		getHolder().addCallback(this);//添加回调函数
	}

	public void darw(){
		Canvas canvas = getHolder().lockCanvas();//锁定画布
		
		canvas.drawColor(Color.WHITE);//初始化画布
		canvas.drawRect(0, 0, 100, 150, paint);//绘制矩形Rect
		
		canvas.save();
		canvas.rotate(30, getWidth()/2, getHeight()/2);//旋转rotate
		canvas.drawLine(100, 150, 300, 400, paint);//绘制直线Line
		canvas.restore();
		
		canvas.drawLine(0, getHeight()/2, getWidth(), getHeight(), paint);//绘制直线Line
		
		contanier.draw(canvas);//集合绘制
		
		getHolder().unlockCanvasAndPost(canvas);//解锁画布
	}
	
	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		
		}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
		darw();
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
				
	}

}
/**
 * SurfaceHolder 控制器
 * 创建surfaceView - canvas绘制图形 - 销毁
 * 锁定画布 - 绘制之前  - 绘制结束 - 解锁画布
 * Paint() 画笔
 * getHolder().lockCanvas();//锁定画布
 * canvas.drawColor() 初始化画布
 * canvas.save()
 * canvas.rotate() 旋转
 * canvas.drawRect() 绘制rect
 * canvas.restore()
 * canvas.drawLine() 绘制line
 * getHolder().unlockCanvasAndPost(canvas);//解锁画布
 *
 * save() - restore() 中间的元素会旋转  否则line也会旋转
 */
Contanier.java

package com.example.surfacev;

import java.util.ArrayList;
import java.util.List;

import android.graphics.Canvas;

public class Contanier {
	private List<Contanier> children = null;//集合
	
	public Contanier(){
		children = new ArrayList<Contanier>();
	}
	
	//绘制
	public void draw(Canvas canvas){
		childrenView(canvas);
		//遍历children集合
		for (Contanier c : children) {
			c.draw(canvas);
		}
	}
	
	//子类复写的方法
	public void childrenView(Canvas canvas){}
	
	//添加 
	public void addChildrenView(Contanier child){
		children.add(child);
	}
	//移除
	public void removeChildrenView(Contanier child){
		children.remove(child);
	}
}
Rect.java

package com.example.surfacev;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;

public class Rect extends Contanier{
	
	Paint paint = null;
	
	public Rect(){
		paint = new Paint();
		paint.setColor(Color.GREEN);
	}
	
	//复写父类绘制方法
	@Override
	public void childrenView(Canvas canvas) {
		super.childrenView(canvas);
		canvas.drawRect(200,200, 500, 600, paint);
		
	}
}
Circle.java
package com.example.surfacev;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;

public class Circle extends Contanier{
	
	Paint paint = null;
	
	public Circle(){
		paint = new Paint();
		paint.setColor(Color.BLUE);
	}
	
	//复写父类绘制方法
	@Override
	public void childrenView(Canvas canvas) {
		super.childrenView(canvas);
		canvas.drawCircle(100, 100, 100, paint);
		
	}
}




















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值