Android UI SurfaceView的使用-绘制组合图型,并使其移动
绘制容器类:
//图形绘制容器
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的使用-绘制组合图型,并使其移动的更多相关文章
- Android UI SurfaceView的使用-绘制单个图型或多个图形
新建MyView类继承自SurfaceView: public class MyView extends SurfaceView implements SurfaceHolder.Callback { ...
- Android 利用SurfaceView进行图形绘制
SurfaceView使用介绍 SurfaceView是View的一个特殊子类,它的目的是另外提供一个线程进行绘制操作. 要使用SurfaceView进行绘制,步骤如下: 1.用SurfaceView ...
- 使用Google Chart API绘制组合图
Google Chart API 绘图 组合图作者:方倍工作室 地址: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN& ...
- 【Android开源框架】使用andbase开发框架实现绘制折线图
在Android中,当有绘制折线图的需求时.大多数人使用的AChartEngine,来进行折线图的绘制.AChartEngine图表引擎确实能够实现折线图的功能.除此之外,我们还能够使用andbase ...
- Android UI 绘制过程浅析(五)自定义View
前言 这已经是Android UI 绘制过程浅析系列文章的第五篇了,不出意外的话也是最后一篇.再次声明一下,这一系列文章,是我在拜读了csdn大牛郭霖的博客文章<带你一步步深入了解View> ...
- Android: 利用SurfaceView绘制股票滑动直线解决延迟问题
1.背景介绍 最近项目要绘制股票走势图,并绘制能够跟随手指滑动的指示线(Indicator)来精确查看股票价格和日期.如下图所示: 上图中的那条白色直线就是股票的指示线,用来跟随手指精确确定股票的时间 ...
- SurfaceView 绘制分形图
之前一直做的是应用类,这次抽时间,参考网上资料实践了下SurfaceView.目标是在页面上画一个科赫曲线的分形图. 代码如下: package com.example.fredric.demo02; ...
- Android自己定义组件系列【9】——Canvas绘制折线图
有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了非常多插件,可是非常多时候我们须要依据详细项目自己定义这些图表,这一篇文章我们一起来看看怎样在Android中使用Can ...
- Android自定义控件 -Canvas绘制折线图(实现动态报表效果)
有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了很多插件,但是很多时候我们需要根据具体项目自定义这些图表,这一篇文章我们一起来看看如何在Android中使用Canvas ...
随机推荐
- Oracle EBS-SQL (INV-8):检查物料入库明细信息.sql
select a.vendor_number 供应商编码 ,a.vendor_name 供应商名称 ,a.item_nu ...
- javascript 事件设计模式
http://plkong.iteye.com/blog/213543 1. 事件设计概述 事件机制可以是程序逻辑更加清晰可见,在JavaScript中很多对象都有自己的事件,如:button有onc ...
- 浅析 C++里面的宏
说到宏,恐怕大家都能说出点东西来:一种预处理,没有分号(真的吗?).然后呢?嗯.......茫然中......好吧,我们就从这开始说起.最常见的宏恐怕是#include 了,其次就是#define 还 ...
- QT 小票打印
原地址: http://www.cppblog.com/biao/archive/2009/09/08/95603.html QString htmlString = QString("&l ...
- WPF 接收exe传的值
原文:WPF 接收exe传的值 一,首先重载APP protected override void OnStartup(StartupEventArgs e) { ...
- 【Sqlserver清空数据库中所有表数据】
脚本: CREATE PROCEDURE sp_DeleteAllData AS EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT AL ...
- 2014第7周三初识CouchBase
今天主要还是完善需求,然后提交评审流程,尽可能不纠结一些细节问题后发现自己速度更快了,或许这才是最好的顺序,其它可能的问题就留在后续发现并解决吧.今天第一次听到并重视下couchbase.上午看到同事 ...
- 【HDU 4463 Outlets】最小生成树(prim,kruscal都可)
以(x,y)坐标的形式给出n个点,修建若干条路使得所有点连通(其中有两个给出的特殊点必须相邻),求所有路的总长度的最小值. 因对所修的路的形状没有限制,所以可看成带权无向完全图,边权值为两点间距离.因 ...
- 【Java接口实现动态加载不同的类】
public interface Person { public double calcuMonthlySalary(double sal, int type); } publi ...
- 一个关于JTabel的DefaultCellEditor渲染很棒的例子
import java.awt.Color; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; imp ...