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
- Android SurfaceView绘制组合图形
- Android SurfaceView绘制组合图形
- android:SurfaceView绘制图形
- 如何利用SurfaceView来绘制组合图形
- Android 利用SurfaceView进行图形绘制
- Android SurfaceView绘制
- 利用surfaceview和path绘制雨伞图形
- OWC11绘制组合图形示例
- Android隐喻(三) 图形绘制: Canvas、SurfaceView、Paint、Surface、SurfaceHolder、Bitmap
- Android UI SurfaceView的使用-绘制单个图型或多个图形
- Android UI SurfaceView的使用-绘制组合图型,并使其移动
- android--(绘制几何图形、图片、surfaceView)
- Android利用SurfaceView绘制正弦曲线
- Android 基于surfaceView绘制正弦曲线
- Android SurfaceView的绘制详解
- android绘制图形
- Android 简单图形绘制
- Android Canvas 图形绘制
- javascript this详解 面向对象
- hdu 2852 KiKi's K-Number
- 段错误原因分析和查找
- cocos的TargetedAction动作类的使用
- linux下安装cmake和mysql遇到的问题总结
- Android SurfaceView绘制组合图形
- Android Netroid解析之——断点续传下载及问题修正
- 通过yum方式升级CentOS kernel
- JDBC中的预编译语句
- HTML5 本地存储 localstorage 安全分析
- Java 自带的加密类MessageDigest类(加密MD5和SHA)
- DIV总是在最上一层
- jQuery的学习
- NSCalendar