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 ...
随机推荐
- GDAL库——读取图像并提取基本信息
GDAL库是一个跨平台的栅格地理数据格式库,包括读取.写入.转换.处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持).它使用了一个单一的抽象数据模型就支持了大多数的栅格数据.这里有GDAL ...
- javac: cannot execute binary file
# java/jdk1.6.0_12/bin/javac-bash: java/jdk1.6.0_12/bin/javac: cannot execute binary file 后来检验,检查了 ...
- linux的NetworkManager服务(转)
在开启NetworkManager服务的情况下,在终端下敲“service network restart”命令: 正在关闭接口 eth0: 设备状态:3 (断开连接) [确定] 正在关闭接口 eth ...
- HTTP based RESTful APIs - asp.net web api
1.HTTP http://www.w3.org/Protocols/rfc2616/rfc2616.html 2.REST是什么http://www.ics.uci.edu/~fielding/pu ...
- linux之SQL语句简明教程---AND OR
在上一页中,我们看到 WHERE 指令可以被用来由表格中有条件地选取资料. 这个条件可能是简单的 (像上一页的例子),也可能是复杂的.复杂条件是由二或多个简单条件透过 AND 或是 OR的连接而成.一 ...
- virtualbox 复制多个虚拟机 (宿主机redhat)
我用VirtualBox做了一个winxp虚拟镜像. 想实现不重新安装而直接复制几个,也就是同时装载几个虚拟机. 但是直接复制已安装好机子的vdi文件,系统会报uuid已存在的错误. 所以,就需要修改 ...
- edit distance leetcode
这样的字符转换的dp挺经典的, 若word1[i+1]==word2[j+1] dp[i+1][j+1] = dp[i][j]:否则,dp[i+1][j+1] = dp[i][j] + 1.(替换原则 ...
- how to translate the text of push button
Background:In a project, the need to translate the buttons on the screen, as shown below,the followi ...
- CCTF-PWN1&&PWN3
CCTF-PWN1&&PWN3 PWN1比较有意思,在得到输入的数据后使用shutdown将标准输入,标准输出和标准错误关闭了读写功能的读.也就是不能进行交互了,要保证一次输入就能拿到 ...
- Fault Diagnosability Infrastructure Overview
Fault Diagnosability Infrastructure Overview The fault diagnosability infrastructure aids in prevent ...