绘制容器类:

//图形绘制容器
public class Contanier {
private List<Contanier> list;
private float x=0,y=0;
public Contanier(){
list=new ArrayList<Contanier>();
}
public void draw(Canvas canvas){
canvas.save();
canvas.translate(getX(), getY());
childrenDraw(canvas);
for(Contanier c : list){
c.draw(canvas);
}
canvas.restore();
}
public void childrenDraw(Canvas canvas){ }
public void addChildren(Contanier child){
list.add(child);
}
public void removeChildren(Contanier child){
list.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;
} }

绘制正方型类:

//绘制正方型
public class Rect extends Contanier { private Paint paint;
public Rect(){
paint=new Paint();
paint.setColor(Color.RED);
} @Override
public void childrenDraw(Canvas canvas) {
super.childrenDraw(canvas);
canvas.drawRect(0, 0, 100, 100, paint);
this.setY(getY()+1);
}
}

绘制圆:

//绘制圆
public class Circle extends Contanier { private Paint paint;
public Circle(){
paint=new Paint();
paint.setColor(Color.BLUE);
}
@Override
public void childrenDraw(Canvas canvas) {
super.childrenDraw(canvas);
canvas.drawCircle(50, 50, 50, paint); }
}

绘制类:

public class GameView extends SurfaceView implements Callback{

	private Contanier contaier;
private Rect rect;
private Circle circle;
public GameView(Context context) {
super(context);
contaier=new Contanier();
rect=new Rect();
circle=new Circle();
rect.addChildren(circle);
contaier.addChildren(rect);
getHolder().addCallback(this);
} private void draw(){
Canvas canvas=getHolder().lockCanvas();
canvas.drawColor(Color.WHITE);
contaier.draw(canvas);
getHolder().unlockCanvasAndPost(canvas);
} private Timer timer=null;
private TimerTask task=null; //开始后让其根据Y轴进行移动
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;
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) { } @Override
public void surfaceCreated(SurfaceHolder holder) {
startTimer();
} @Override
public void surfaceDestroyed(SurfaceHolder holder) {
stopTimer();
} }

MainActivity:

   @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GameView(this));
}

效果:

Android UI SurfaceView的使用-绘制组合图型,并使其移动的更多相关文章

  1. Android UI SurfaceView的使用-绘制单个图型或多个图形

    新建MyView类继承自SurfaceView: public class MyView extends SurfaceView implements SurfaceHolder.Callback { ...

  2. Android 利用SurfaceView进行图形绘制

    SurfaceView使用介绍 SurfaceView是View的一个特殊子类,它的目的是另外提供一个线程进行绘制操作. 要使用SurfaceView进行绘制,步骤如下: 1.用SurfaceView ...

  3. 使用Google Chart API绘制组合图

    Google Chart API 绘图 组合图作者:方倍工作室 地址: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN& ...

  4. 【Android开源框架】使用andbase开发框架实现绘制折线图

    在Android中,当有绘制折线图的需求时.大多数人使用的AChartEngine,来进行折线图的绘制.AChartEngine图表引擎确实能够实现折线图的功能.除此之外,我们还能够使用andbase ...

  5. Android UI 绘制过程浅析(五)自定义View

    前言 这已经是Android UI 绘制过程浅析系列文章的第五篇了,不出意外的话也是最后一篇.再次声明一下,这一系列文章,是我在拜读了csdn大牛郭霖的博客文章<带你一步步深入了解View> ...

  6. Android: 利用SurfaceView绘制股票滑动直线解决延迟问题

    1.背景介绍 最近项目要绘制股票走势图,并绘制能够跟随手指滑动的指示线(Indicator)来精确查看股票价格和日期.如下图所示: 上图中的那条白色直线就是股票的指示线,用来跟随手指精确确定股票的时间 ...

  7. SurfaceView 绘制分形图

    之前一直做的是应用类,这次抽时间,参考网上资料实践了下SurfaceView.目标是在页面上画一个科赫曲线的分形图. 代码如下: package com.example.fredric.demo02; ...

  8. Android自己定义组件系列【9】——Canvas绘制折线图

    有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了非常多插件,可是非常多时候我们须要依据详细项目自己定义这些图表,这一篇文章我们一起来看看怎样在Android中使用Can ...

  9. Android自定义控件 -Canvas绘制折线图(实现动态报表效果)

    有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了很多插件,但是很多时候我们需要根据具体项目自定义这些图表,这一篇文章我们一起来看看如何在Android中使用Canvas ...

随机推荐

  1. Nginx学习之二-配置项解析及编程实现

    在开发功能灵活的Nginx模块时,需要从配置文件中获取特定的信息.不过,我们并不需要再编写一套读取配置的系统,Nginx已经为用户提供了强大的配置项解析机制,同时还支持“-s reload”命令,可以 ...

  2. Android 样式

    先在Value文件夹下建一个Common.xml的文件. <style name="CodeFont" parent="@android:style/TextApp ...

  3. 关于网络协议和socket编程基本概念

    TCP协议可以说已经是IT人耳熟能详的协议,最近在学习socket网络编程时后重新温习一下这个协议,针对一些问题做了一些总结,很多理解可能还不是很准确. 1. 协议是什么?所谓的各种网络协议无非是一种 ...

  4. android--graphics

    Color类 Constants |____BLACK, BLUE, CYAN Methods |____argb,rgb,alpha, red, green, blue |____parseColo ...

  5. NFC 与点对点应用

    http://wenku.baidu.com/view/6a7623a28762caaedc33d426.html

  6. Linux进程间通信——使用命名管道

    在前一篇文章——Linux进程间通信——使用匿名管道中,我们看到了如何使用匿名管道来在进程之间传递数据,同时也看到了这个方式的一个缺陷,就是这些进程都由一个共同的祖先进程启动,这给我们在不相关的的进程 ...

  7. iOS伪实现打地鼠游戏

    打地鼠是一款可以用iOS知识来实现的一种游戏.其核心技术就是通过imageView来播放动画,点击button时来停止当前播放的动画开始击打地鼠的动画.话不多说直接上代码. 这是添加当前的背景图片,然 ...

  8. UITableView 或 UIScrollView 点击状态栏列表回到顶部

    整理来自互联网- 这是tableView继承的scrollView的一个属性 scrollsToTop. 官方说明是这样的: // When the user taps the status bar, ...

  9. 卸载mysql残留

    一.在控制面板中查看是否有mysql,有则进行卸载.或执行同样版本号的mysql安装文件,选择"remove"进行卸载. 二.卸载mysql后其服务仍在,解决的方法: 点击&quo ...

  10. 关于smali插桩

    虽说是老生常谈的东西了,稍微记录一下. 我觉得最重要的就是寄存器的问题了,如果需要额外的寄存器,要在smali函数的最前面将寄存器数量增加到需要的数量. 在smali代码中,寄存器有两种表示方式,一种 ...