接下来讲讲使用surfView来实现动画。surfView具体的用法说明已在上一篇中讲了,这里就不仔细将了来直接看代码。

1.首先创建一个Contanier容器,用来添加各种画板代码如下:

</pre><pre name="code" class="java">import android.graphics.Canvas;
import java.util.ArrayList;
import java.util.List;/*** 创建一个容器* Created by Young on 2015/5/5.*/
public class Contanier {private List<Contanier> children=null;//用于保存子容器private float x,y;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  Contanier(){children=new ArrayList<Contanier>();}/*** 子容器* @param canvas*/public void  childrenView(Canvas canvas) {}/*** 添加指定的子容器* @param child*/public void  addChildrenView(Contanier child){children.add(child);}/*** 移除指定的子容器* @param child*/public  void removeChildrenView(Contanier child){children.remove(child);}public void draw(Canvas canvas){canvas.save();//保存canvas状态canvas.translate(getX(),getY());childrenView(canvas);for (Contanier c:children){c.draw(canvas);}canvas.restore();//恢复canvas之前保存的状态,防止保存后对canvas执行的操作对后续的绘制的影响}}
2.创建一个GameView继承与SurfView用来实现动画画图,具体代码如下;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;/*** Created by Young on 2015/5/5.*/
public class GameView extends SurfaceView implements SurfaceHolder.Callback {private Contanier contanier;private Rect rect;private Circle circle;private SurfaceHolder holder;private MyThread myThread;public GameView(Context context) {super(context);holder=this.getHolder();holder.addCallback(this);contanier=new Contanier();rect= new Rect();circle=new Circle();rect.addChildrenView(circle);//将圆放入一个矩形中contanier.addChildrenView(rect);//将矩形放入一个容器中myThread=new MyThread(holder);//创建一个绘图线程}/*** 创建一个线程用于实现动画*/class MyThread extends Thread {private SurfaceHolder holder;public boolean isRun;public MyThread(SurfaceHolder holder) {this.holder = holder;isRun = true;}@Overridepublic void run() {int count = 0;while (isRun) {Canvas c = null;try {synchronized (holder) {c = holder.lockCanvas();//锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面画图等操作了。c.drawColor(Color.WHITE);//设置画布背景颜色contanier.draw(c);Thread.sleep(100);//使线程睡眠1s}} catch (InterruptedException e) {e.printStackTrace();} finally {if (c != null) {holder.unlockCanvasAndPost(c);//结束锁定画图,并提交改变。}}}}}@Overridepublic void surfaceCreated(SurfaceHolder holder) {myThread.isRun=true;myThread.start();//开启线程}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {myThread.isRun=false;}/*** 绘制一个红色的矩形*/class Rect extends Contanier{private Paint paint=null;public Rect(){paint=new Paint();paint.setColor(Color.RED);//画笔颜色}@Overridepublic void childrenView(Canvas canvas) {super.childrenView(canvas);canvas.drawRect(0, 0, 100, 100, paint);this.setY(this.getY() + 1);//每次像素加一this.setX(this.getX()+1);}}/*** 绘制一个蓝色的圆*/class Circle extends Contanier{private Paint paint=null;public Circle(){paint=new Paint();paint.setColor(Color.BLUE);}@Overridepublic void childrenView(Canvas canvas) {super.childrenView(canvas);canvas.drawCircle(50,50,50,paint);}}
}
3.最后一步就是把所画好的SurfView添加到页面上去,具体代码如下;
mainActivity.java
public class MainActivity extends ActionBarActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//setContentView(new MyView(this));setContentView(new GameView(this));// MyView myView=new MyView(this);}
}
doem下载:http://download.csdn.net/detail/agonie201218/8665291

Android之SurfaceView(二)相关推荐

  1. Android使用SurfaceView开发《捉小猪》小游戏 (一)

    先上效果图: 哈哈, 说下实现思路: 我们可以把每一个树桩, 小猪, 车厢都看成是一个Drawable, 这个Drawable里面保存了x, y坐标, 我们的SurfaceView在draw的时候, ...

  2. android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

    写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载   zbarLib编译project  project下载0积分 bug 在2.3的系统中Hol ...

  3. [转载]android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

    写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) 前天早上登陆CSDN时候一条消息:一网友提出了两点疑惑 扫描框目前只是做的假象,是全屏的图片进行解析 中文乱码现象 ...

  4. android 画笔轨迹,Android中SurfaceView和view画出触摸轨迹

    一.引言 想实现一个空白的画板,上面可以画出手滑动的轨迹,就这么一个小需求.一般就来讲就两种实现方式,view或者surfaceview.下面看看两种是如何实现的. 二.实现原理 先简单说一下实现原理 ...

  5. android surfaceview 大小,Android设置SurfaceView任意大小、任意位置、保持预览宽高比与屏...

    Android设置SurfaceView任意大小.任意位置.保持预览宽高比与屏 Android设置SurfaceView任意大小.任意位置.保持预览宽高比与屏显一致 一.任意大小.任意位置 1) 代码 ...

  6. android 使用 surfaceView 获取 camera 预览界面图像数据

    在android中,通过相机获取预览界面的需求似乎很变态,好像也没有什么使用场景.但是,有一个场景需要获取预览界面的图像,就是扫码,比如微信,支付宝的扫一扫,就是需要获取预览界面的图像数据的. 实现逻 ...

  7. Android之SurfaceView(一)

    首先我们先来看下官方API对SurfaceView的介绍 SurfaceView的API介绍 Provides a dedicated drawing surface embedded inside ...

  8. 【Android游戏开发二十七】讲解游戏开发与项目下的hdpi 、mdpi与ldpi资源文件夹以及游戏高清版本的设置...

    今天一个开发者问到我为什么游戏开发要删除项目下的hdpi.mdpi和ldpi文件夹:下面详细给大家解答一下: 首先童鞋们如果看过我写的<[Android游戏开发二十一]Android os设备谎 ...

  9. Android 之surfaceView (画动态圆圈)

     通过之前介绍的如何 自定义View, 我们知道使用它可以做一些简单的动画效果.它通过不断循环的执行View.onDraw方法,每次执行都对内部显示的图形做一些调整,我们假设 onDraw方法每秒 ...

最新文章

  1. [转载]Matlab之静态文本多行输出
  2. ps怎么制作流体_PS实例教程:制作流体质感背景
  3. JDBC第一篇之获得数据库连接
  4. 20170904_C基础
  5. Py函数直接传入root是啥意思_Python内部函数——用处何在?
  6. linux之怎么使vim永久显示行号
  7. pytorch初入门学习记录
  8. 阿里开源mysql监控_Alibaba-技术专区-开源项目之Druid数据库监控平台
  9. (转)android连网详解
  10. wince6移植之创建.pbcxml文件
  11. .Net Framework 总结
  12. 转:C#数字、16进制字符串和字节之间互转 bin2hex
  13. tcl怎么实现从服务器拷贝文件夹,如何在TCL中二进制读取文件并通过XMLRPC将其发送到用Python编写的服务器?...
  14. LTE下行传输机制--PBCH
  15. msgbox php,VBA消息框(MsgBox)
  16. 网络技术故障背后:50元发动的DDoS流量攻击
  17. ip地址的分类及地址范围
  18. k8s对外攻击面总结
  19. synopsys软件安装
  20. 习题解答_反正切函数的求导

热门文章

  1. NBT:宏基因组10X建库+雅典娜算法组装获得微生物高质量基因组
  2. 扩增子分析解读3格式转换,去冗余,聚类
  3. R语言data.table导入数据实战:把data.frame数据转化为data.table数据
  4. R语言ggplot2可视化分面图(facet_grid)、自定义缩小分面图标签栏的高度、但是不改变标签栏标签文本的大小、通过element_text函数的margin参数设置实现
  5. pandas使用isna函数和any函数检查dataframe是否包含缺失值、整体是否有缺失值,不区分行列(check if dataframe contains any missing values
  6. Python matplotlib可视化:用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的外侧顶部)
  7. pandas数据预处理(字段筛选、query函数进行数据筛选、缺失值删除)、seaborn可视化分面图(facet)、seaborn使用Catplot可视化分面箱图(Faceted Boxplot)
  8. R语言ggplot2可视化增加坐标轴的刻度数实战:自定义坐标轴刻度粒度、增加坐标轴刻度的粒度、更加精细地表达
  9. OLTP与OLAP是什么?OLTP与OLAP的主要区别是什么?
  10. Android10桌面启动器高级版,SONY Xperia launcher-索尼Z5桌面启动器下载10.0.A.0安卓最新版-西西软件下载...