绘制容器类:

//图形绘制容器
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. ReactNative

    基于ReactNative实现的博客园手机客户端   去年九月,facebook发布了react-native,将web端的javaScript和react技术扩展到了IOS和Android的原生应用 ...

  2. alsa音频驱动科普第一课

    做linux音频编程对alsa应该不陌生. 但是对于刚接触这块技术的同学来说是一件困难的事情.原因在于:网上关于alsa的资料太少了,特别国内的资料更是大部分重复.对于初学者来说特别苦恼. 由于笔者经 ...

  3. Arduino红外遥控系列教程2013——发射与接收

    教程一:红外接收教程本教程共四步操作,将教大家如何收集电视红外遥控器的编码 视频链接:http://v.youku.com/v_show/id_XNTE2NjQ5NTcy.html 第一步:电路连接, ...

  4. delete 多表删除的使用(连表删除)

    delete 多表删除的使用     1.从数据表t1中把那些id值在数据表t2里有匹配的记录全删除掉 DELETE t1 FROM t1,t2 WHERE t1.id=t2.id 或 DELETE  ...

  5. C# 线程池异步调用

    许多应用程序使用多个线程,但这些线程经常在休眠状态中耗费大量的时间来等待事件发生.其他线程可能进入休眠状态,并且仅定期被唤醒以轮询更改或更新状态信息,然后再次进入休眠状态.为了简化对这些线程的管理,. ...

  6. [置顶] lvs-tun隧道模式搭建

    一.lvs直接路由原理 由于图片还要一张一张上传,可以到下面网站下载我的word版本: http://download.csdn.net/user/y0908105023 补充基础知识: OSI(Op ...

  7. 【LeetCode练习题】Gas Station

    Gas Station There are N gas stations along a circular route, where the amount of gas at station i is ...

  8. 项目中常用方法总结(将将DataTable数据集映射到实体对象)【转】

    本篇把项目中用到的一些通用方法总结出来, 这些方法因为经常需要在项目中用到,所以把它们归纳在一起, 形成一个.dll 文件是一个理想的选择. 这样也便于日后缩短开发周期. 一. 把一个DataGrid ...

  9. Stopwatch 类【转】

    一般我们想要测试使用那种方法或着那种类型效率更高,使用Stopwatch类进行测试就可以,我也是现在才知道,汗一个. 先来看个小示例,如下. 前提,先引用using System.Diagnostic ...

  10. 实现了在android实现左右滑动切换界面的效果

    这是实现了在android实现左右滑动切换界面的效果,该效果的源码下载,请到源码天堂下载吧,喜欢的朋友可以研究一下. 布局文件 <?xml version="1.0" enc ...