当前位置: 首页 > 编程日记 > 正文

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);}@Overridepublic 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);}@Overridepublic 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() {@Overridepublic void run() {draw();}};timer.schedule(task, 100,100);}private void stopTimer(){if(timer!=null){timer.cancel();timer=null;}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}@Overridepublic void surfaceCreated(SurfaceHolder holder) {startTimer();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {stopTimer();}}


MainActivity:

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

效果:




相关文章:

新型混合共识机制及抗量子特性的 Hcash 主链测试链即将上线

由上海交通大学密码与计算机安全实验室&#xff08;LoCCS&#xff09;及上海观源信息科技有限公司负责研发的、具有新型混合共识机制及抗量子特性的 Hcash 主链代码已完成并在 2017 年 12 月18 日之前上传至github&#xff1a; https://github.com/HcashOrg/hcashd https://git…

CentOS 6虚拟机安装

这篇博客已经被合并到这里了&#xff1a; 虚拟机安装CentOS以及SecureCRT设置【完美无错版】 下面不用看了&#xff0c;看上面即可 1.下载虚拟机Oracle VM VirtualBox最新的下载地址&#xff1a; http://download.virtualbox.org/virtualbox/4.1.6/VirtualBox-4.1.6-74713-Win…

开发中新游戏《庞加莱》

三体题材的游戏&#xff0c;表现三体人在三体星上生活和冒险。收集水和物器&#xff0c;躲避火焰与巨日&#xff0c;探索遗迹并与巨型生物战斗。温度会因太阳位置不同而发生变化&#xff0c;进而对环境产生一定影响。 游戏开发中。 ---- 2017-4-27版视频&#xff1a; http://v.…

介绍一个打怪升级练习 Python 的网站,寓教于乐~

作者 | 周萝卜来源 | 萝卜大杂烩这是一个学习 Python 的趣味网站&#xff0c;通过关卡的形式来锻炼 Python 水平。一共有 33 关&#xff0c;每一关都需要利用 Python 知识解题找到答案&#xff0c;然后进入下一关。很考验对 Python 的综合掌握能力&#xff0c;比如有的闯关需要…

hive基本操作与应用

通过hadoop上的hive完成WordCount 启动hadoop ssh localhost cd /usr/local/hadoop ./sbin/start-dfs.sh cd /usr/local/hive/lib service mysql start start-all.sh Hdfs上创建文件夹 hdfs dfs -mkdir test1 hdfs dfs -ls /user/hadoop 上传文件至hdfs hdfs dfs -put ./try.tx…

PHP源代码分析-字符串搜索系列函数实现详解

今天和同事在讨论关键字过虑的算法实现&#xff0c;前几天刚看过布隆过滤算法&#xff0c;于是就想起我们公司内部的查找关键字程序&#xff0c;好奇是怎么实现的。于是查找了一下源代码&#xff0c;原来可以简单地用stripos函数查找&#xff0c; stripos原型如下&#xff1a; …

麻省理工研究:深度图像分类器,居然还会过度解读

作者 | 青苹果来源 | 数据实战派某些情况下&#xff0c;深度学习方法能识别出一些在人类看来毫无意义的图像&#xff0c;而这些图像恰恰也是医疗和自动驾驶决策的潜在隐患所在。换句话说&#xff0c;深度图像分类器可以使用图像的边界&#xff0c;而非对象本身&#xff0c;以超…

Oracle 查询转换之子查询展开

概念:子查询展开&#xff08;Subquery Unnesting&#xff09;是优化器处理带子查询的目标sql的一种优化手段&#xff0c;它是指优化器不再将目标sql中子查询当作一个独立的处理单元来单独执行&#xff0c;而是将该子查询转换为它自身和外部查询之间等价的表连接。这种等价连接转…

Xcode中通过删除原先版本的程序来复位App

可以在Xcode菜单中点击 Product->Clean Build Folder (按住Option键,在windows键盘中是Alt键.) 此时Xcode将会从设备中删除(卸载uninstall)任何该app之前部署的版本. 接下来重启Xcode,再试一下,有时这可以修复非常奇怪(really weird)的问题.

深入理解PHP之OpCode

OpCode是一种PHP脚本编译后的中间语言&#xff0c;就像Java的ByteCode,或者.NET的MSL。 此文主要基于《 Understanding OPcode》和 网络&#xff0c;根据个人的理解和修改&#xff0c;特记录下来 &#xff1a;PHP代码&#xff1a; <?phpecho "Hello World";$a 1…

关于 AIOps 的过去与未来,微软亚洲研究院给我们讲了这些故事

作者 | 贾凯强出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;在过去的15年里&#xff0c;云计算实现了飞速发展&#xff0c;而这种发展也为诸多的前沿技术奠定了基础&#xff0c;AIOps便在此环境中获得了良好的发展契机。在数字化转型的浪潮下&#xff0c;云计算已经…

JS 正则表达式 0.001 ~99.999

^(0|[1-9][0-9]?)(\.[0-9]{0,2}[1-9])?$转载于:https://www.cnblogs.com/wahaha603/p/9050130.html

深入浅出PHP(Exploring PHP)

一直以来&#xff0c;横观国内的PHP现状&#xff0c;很少有专门介绍PHP内部机制的书。呵呵&#xff0c;我会随时记录下研究的心得&#xff0c;有机会的时候&#xff0c;汇总成书。:) 今天这篇&#xff0c;我内心是想打算做为一个导论&#xff1a; PHP是一个被广泛应用的脚本语言…

懒人神器 !一个创意十足的 Python 命令行工具

作者 | 写代码的明哥来源 | Python编程时光当听到某些人说 xx 库非常好用的时候&#xff0c;我们总是忍不住想要去亲自试试。有一些库&#xff0c;之所以好用&#xff0c;是对一些库做了更高级的封闭&#xff0c;你装了这个库&#xff0c;就会附带装了 n 多依赖库&#xff0c;就…

Regular Expression Matching

正则匹配 Regular Expression Matching Implement regular expression matching with support for . and *. . Matches any single character. * Matches zero or more of the preceding element.The matching should cover the entire input string (not partial).The functio…

PI校正环节的程序实现推导过程

PI校正环节在经典控制论中非常有用&#xff0c;特别是对负反馈控制系统&#xff0c;基本上都有PI校正环节。1.下面分别说明比例环节和积分环节的作用&#xff0c;以阶跃信号为例。①比例环节单独作用以上分析说明&#xff0c;若只有比例环节的控制系统&#xff0c;阶跃响应也是…

几行 Python 代码实现邮件解析,超赞~

作者 | Yunlor来源 | CSDN博客前言如何通过python实现邮件解析&#xff1f;邮件的格式十分复杂&#xff0c;主要是mime协议&#xff0c;本文主要是从实现出发&#xff0c;具体原理可以自行研究。一、安装通过mailgun开源的Flanker库实现邮件解析。该库包含了邮件地址解析和邮件…

深入理解PHP原理之变量(Variables inside PHP)

或许你知道&#xff0c;或许你不知道&#xff0c;PHP是一个弱类型&#xff0c;动态的脚本语言。所谓弱类型&#xff0c;就是说PHP并不严格验证变量类型(严格来讲&#xff0c;PHP是一个中强类型语言,这部分内容会在以后的文章中叙述)&#xff0c;在申明一个变量的时候&#xff0…

jQuery中的.height()、.innerHeight()和.outerHeight()

jQuery中的.height()、.innerHeight()和.outerHeight()和W3C的盒模型相关的几个获取元素尺寸的方法。对应的宽度获取方法分别为.width()、.innerWidth()和.outerWidth()&#xff0c;在此不详述。1. .height()获取匹配元素集合中的第一个元素的当前计算高度值 或 设置每一个匹配…

Python实战之logging模块使用详解

用Python写代码的时候&#xff0c;在想看的地方写个print xx 就能在控制台上显示打印信息&#xff0c;这样子就能知道它是什么了&#xff0c;但是当我需要看大量的地方或者在一个文件中查看的时候&#xff0c;这时候print就不大方便了&#xff0c;所以Python引入了logging模块来…

深入理解PHP原理之变量作用域

作者:laruence(http://www.laruence.com/)地址: http://www.laruence.com/2008/08/26/463.html PHP变量的内部表示是如何和用户脚本中的变量联系起来的呢&#xff1f;也就是说&#xff0c;如果我在脚本中写下&#xff1a;<?php $var"laruen…

Azure AI的又一里程碑,Neural TTS新模型呈现真人般情感饱满的AI语音

在人与人之间的对话中&#xff0c;即使是同样的字句&#xff0c;也会因为所处情景和情感的不同而表现出丰富的抑扬顿挫&#xff0c;而这种动态性恰恰是各种AI合成语音的“软肋”。相比于人类讲话时丰富多变的语气&#xff0c;AI语音的“心平气和”往往给人带来明显的违和感。 …

VS2010中“工具选项中的VC++目录编辑功能已被否决”解决方法

http://blog.csdn.net/chaijunkun/article/details/6658923 这是VS2010的改变&#xff0c;不能够在“工具-选项”中看到“VC目录”了。 但是呢&#xff0c;我们可以在另外一个地方找到它&#xff0c;请看下边的对比照片。 VS2008中&#xff1a; VS2010中&#xff1a; 打开方式非…

Bminer 7.0.0 ETH挖矿教程(Linux 64)

Bminer产品介绍Bminer是目前最快的挖矿程序&#xff0c;Bminer是基于NVIDIA GPU深度优化的挖矿软件。Bminer支持Equihash和Ethash两种算法的虚拟币&#xff0c;包括&#xff1a;ETH&#xff08;以太坊)&#xff0c;ETC&#xff0c;ZEC&#xff08;零币&#xff09;&#xff0c;…

深入理解PHP原理之变量分离/引用(Variables Separation)

引自: http://www.laruence.com/ [风雪之隅 ]在前面的文章中我已经介绍了PHP的变量的内部表示(深入理解PHP原理之变量(Variables inside PHP))&#xff0c;以及PHP中作用域的实现机制(深入理解PHP原理之变量作用域(Scope inside PHP))。这节我们就接着前面的文章&#xff0c;继…

C# 属性、索引

属性&#xff08;property&#xff09;: public string Name {get{return _name;}set{_name value;} } 简写为&#xff1a; public string Name { set; get;} 索引器&#xff08;index&#xff09;&#xff1a; 索引器为C#程序语言中泪的一种成员&#xff0c;它是的对象可…

分享几段祖传的 Python 代码,拿来直接使用!

作者 | 周萝卜来源 | 萝卜大杂烩今天分享几段工作生活中常用的代码&#xff0c;都是最为基础的功能和操作&#xff0c;而且大多还都是出现频率比较高的&#xff0c;很多都是可以拿来直接使用或者简单修改就可以放到自己的项目当中日期生成很多时候我们需要批量生成日期&#xf…

JVM——Java虚拟机架构

Java虚拟机&#xff08;Java virtualmachine&#xff09;实现了Java语言最重要的特征&#xff1a;即平台无关性。 平台无关性原理&#xff1a;编译后的 Java程序&#xff08;.class文件&#xff09;由 JVM执行。JVM屏蔽了与具体平台相关的信息&#xff0c;使程序可以在多种平台…

深入理解PHP之数组遍历

本文地址: http://www.laruence.com/2009/08/23/1065.html 经常会有人问我, PHP的数组, 如果用foreach来访问, 遍历的顺序是固定的么? 以什么顺序遍历呢? 比如: <?php$arr[laruence] huixinchen;$arr[yahoo] 2007;$arr[baidu] 2008;foreach ($arr as $key >…

Github 年度最受欢迎的 TOP30 Python 项目,超值

作者 | 俊欣来源 | 关于数据分析与可视化今天小编整理归纳了2021年Github上面最受欢迎的30个Python项目&#xff0c;帮助大家在打磨技术与提升自我上面更进一步。通过代码来获取Github官网有开源的接口&#xff0c;因此数据的获取也就方便了许多&#xff0c;代码如下url https…