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.javapackage 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);
}
}
797

被折叠的 条评论
为什么被折叠?



