android 如何高效开发学习Android动画

新手如何快速的学习Android开发
  首先说说环境的搭建吧,本来这是一件很容易的事情,但是很多同学依旧会遇到很多的问题,我之前给过的建议就是在网站下一个Android开发环境的教程,然后一步一步去搭建。但是发现很多的巴友都在安卓巴士的官方群里提了很多的搭建环境的问题,开始的时候还是很耐心的解决,但是发现很多的同学一遇到有问题第一件事情想到的就是到群里问,我觉得这个很不好,遇到问题首先是要自己去看看哪里出问题了,如果找不到问题,应该是想到搜索引擎才对的,谷歌肯定会给你最好的解答的。
  一、Android开发起步
  其次说的是刚刚起步学习的同学,假如开始没有任何的开发经验的话,千万不要着急,不要想着在短时间内就把一个语言学习好,因为你之前没有任何的学习经验,在这个过程中需要有耐心地学习完JAVA的基础知识,然后才开始踏上Android开发之旅。一类同学是只之前做过JAVA开发经验的,这类同学可以在Android上迅速上手,但是同样的是不可忽略Android的一些基础知识,只有把基础掌握好了,才能在后期取得大的进步。
  二、Android基础知识学习
  在掌握好JAVA基础知识后,接下来就是学习Android基础知识和如何查看开发文档了,在这个阶段我认为是学习最有劲头和最有收获的时候,因为从一无所知到了解是会让人有收获良多的感觉,事实上在这一阶段也是学习了很多,至少知道如何建立工程,知道一些基本的机制很常用函数的用法,这个阶段会出现很多的问题,往往一个很低级的问题都会把你难倒,而这阶段正式培养学习能力的好时机,还是那句话,凡是遇到问题第一个想的是自己去解决,自己解决不了的,用百度用谷歌,要学会使用搜索引擎,大部分的时候问题都能得到解决,因为你遇到过的问题别人早就遇到过了,假如搜索引擎也找不到好的答案,这时候可以到论坛发帖问,网上牛人很多,也可以选择到群里咨询。
  三、Android开发进阶
  学习完Android基础知识以后,很多同学很快就会感觉到学习停步不前,感觉自己似懂非懂,我觉得这个时候是学习最关键的时候,因为一旦你踏出这一步之后,你对Android的理解就会跟更加透彻,做起开发也会更加有信心,但是怎样跨过这一阶段,我根据自己的经验是首先是保持对自己的信心,自己找一个比较简单的项目做做或者找一些应用的源代码研究研究,然后自己山寨出来一个,这样你也会有了学习的方向,因为你在了解了基础知识以后急切需要证明一下自己到底是学到了什么东西,而开发出一个自己的简单应用,就是最大的证明了,而且在开发应用的时候,肯定会遇到很多的问题,而在独立解决bug的同时,你已经掌握了独立处理问题的能力。
  如果你顺利地走完了前面的三个阶段,恭喜你,你不知不觉之中已经成为一个Android的开发者了。
  最后总结一下,学习最主要还是培养自学能力,要学会使用搜索引擎帮助学习,要学会共享互助的开源精神。
更多开发相关资料:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。登录黑马程序员公开课
使用论坛账号可直接登录
没有账号?&&
解锁/找回密码
输入您的用户名:
输入注册时填写的邮箱:
您好!您可以在线提交免费试听申请,审核通过获得试听券后,可在24小时内免费体验全平台所有正在直播的网络班及远程班。
温馨提示:
网络班直播时间为20:00-22:00
远程班直播时间为9:00-18:00
若您是在校大学生,可以先进行大学生认证,认证成功后您可申请免费试听3天。
在读大学生
您从何处得知该网站:
视频教程下载
同学、老师或朋友介绍
报名课程:
真实姓名:
您的状态:
在读大学生
报名后您将在开课前收到短信提醒,公开课结束后还可以下载本课程的视频!每日晚20:00,我们与您相约黑马程序员公开课!
温馨提示:初次使用听课券即代表启用
输入课程听课券:
欢迎来到黑马程序员公开课!
8天快速掌握Android视频(适合有JavaWeb基础学习)
课程介绍:
黎活明,Java EE高级架构师与咨询顾问,国内第一本ejb3.0书籍的作者,有着丰富的b/s系统开发与网站运营经验,主持或参与《一号通》、《固话彩铃》、《移动办公OA》、《统一信息发送机》、《MSN业务支撑平台》和《国...
视频目录:黑马程序员Android视频教程_前言黑马程序员Android视频教程_搭建Android开发环境黑马程序员Android视频教程_创建与启动手机模拟器和学习使用ANDROID操作系统黑马程序员Android视频教程_开发与运行(卸载)第一个ANDROID应用黑马程序员Android视频教程_项目的目录结构与安装及启动过程分析黑马程序员Android视频教程_电话拔号器黑马程序员Android视频教程_查看应用输出的错误信息与如何部署应用到真实手机 黑马程序员Android视频教程_短信发送器黑马程序员Android视频教程_深入了解各种布局技术黑马程序员Android视频教程_对应用进行单元测试黑马程序员Android视频教程_查看与输出日志信息黑马程序员Android视频教程_文件的保存与读取黑马程序员Android视频教程_文件的操作模式黑马程序员Android视频教程_把文件存放在SDCard黑马程序员Android视频教程_采用Pull解析器解析和生成XML内容黑马程序员Android视频教程_采用SharedPreferences保存用户偏好设置参数黑马程序员Android视频教程_创建数据库与完成数据添删改查黑马程序员Android视频教程_在SQLite中使用事务黑马程序员Android视频教程_采用ListView实现数据列表显示黑马程序员Android视频教程_采用ContentProvider对外共享数据黑马程序员Android视频教程_监听ContentProvider中数据的变化黑马程序员Android视频教程_访问通信录中的联系人和添加联系人黑马程序员Android视频教程_网络通信之网络图片查看器黑马程序员Android视频教程_网络通信之网页源码查看器黑马程序员Android视频教程_网络通信之资讯客户端黑马程序员Android视频教程_采用JSON格式返回数据给资讯客户端黑马程序员Android视频教程_网络通信之通过GET和POST方式提交参数给web应用黑马程序员Android视频教程_网络通信之通过HTTP协议实现文件上传黑马程序员Android视频教程_发送xml数据和调用webservice黑马程序员Android视频教程_多线程下载原理黑马程序员Android视频教程_多线程断点下载器黑马程序员Android视频教程_文件断点上传器黑马程序员Android视频教程_为应用添加多个Activity与参数传递黑马程序员Android视频教程_Activity的启动模式黑马程序员Android视频教程_Intent深入解剖黑马程序员Android视频教程_Activity生命周期黑马程序员Android视频教程_采用广播接收者实现短信qie听器黑马程序员Android视频教程_采用广播接收者拦截外拔电话及其特性黑马程序员Android视频教程_采用Service实现电话qie听器黑马程序员Android视频教程_建立能与访问者进行相互通信的本地服务黑马程序员Android视频教程_使用AIDL实现进程通信黑马程序员Android视频教程_服务的生命周期黑马程序员Android视频教程_音乐播放器黑马程序员Android视频教程_在线视频播放器黑马程序员Android视频教程_拍照黑马程序员Android视频教程_视频刻录黑马程序员Android视频教程_手势识别黑马程序员Android视频教程_实现软件国际化黑马程序员Android视频教程_屏幕适配黑马程序员Android视频教程_样式与主题黑马程序员Android视频教程_编码实现软件界面黑马程序员Android视频教程_发送状态栏通知黑马程序员Android视频教程_采用网页设计软件界面黑马程序员Android视频教程_tween动画黑马程序员Android视频教程_frame动画的实现黑马程序员Android视频教程_activity切换动画与页面切换动画黑马程序员Android视频教程_采用方向传感器实现指南针
讲师:黎活明
黎活明,Java EE高级架构师与咨询顾问,国内第一本ejb3.0书籍的作者,有着丰富的b/s系统开发与网站运营经验,主持或参与《一号通》、《固话彩铃》、《移动办公OA》、《统一信息发送机》、《MSN业务支撑平台》和《国内与国际机票预定系统》等项目,成功运营过中国农业网/游易网等电子商务网站。利用业余时间写作《EJB3.0实例教程》电子书(http://www.foshanshop.net)并独立开发了国内第一个采用ejb3.0实现的大型电子商务网站()的所有代码。《EJB3.0实例教程》自2006年8月份公布在网上免费被大家下载以后,在互联网上广为流传,得到了众多高级java开发人员的高度评价和赞赏,被读者评为最好的ejb3.0入门教程,广大读者纷纷给黎老师来信表达敬佩和感激之情,据网友反馈,国内第一批ejb3.0的开发者,大多都是从黎老师的这本电子书开始起步的。目前,黎老师收集了众多读者的反馈和建议后,对《EJB3.0实例教程》进行大量的扩展和完善,并重新命名为《EJB3.0入门经典》,已由清华大学出版社正式出版。
中国真正0元先学四个月,保最低元以上就业的Java培训、Android培训、.Net培训、Unity3d培训、iOS培训机构
Copyright , CSDN.NET, All Rights Reserved
京ICP备号-2
北京校区:
海淀区东北旺西路8号中关村软件园9号楼国际软件大厦2区3层
北京市海淀区西三旗桥东中腾建华商务大厦二层
电话:010-
深圳校区:
宝安区洪浪北二路2号鼎新科技园凌云大厦11层
上海校区:
上海市闵行区联航路1588号坤大科技楼2号楼5层
电话:021-
友情链接:
手机扫一扫资料早拿到如何快速学好Android开发
  如何快速学好开发?怎么样才能快速学好开发?很多初学者可能会问,怎么样才能学好android,我们要看什么书呢,还是什么视频,其实这些都不是重要的,重要的是,你认为自己可以学好android,认为自己可以坚持下来。其实学很多语言都是通的,你要有C基础,学JAVA很快的,等你学会了JAVA学android也很快,学语言,无非就是要学好基础,弄清楚概念,然后做个简单的例子,慢慢的体会为什么要用这个,用这个有什么好处,这样印象就深了,基础打好了,到后面你会觉得突然自己提高了很多,很多东西都明白了,在黑暗中的努力是为了迎接光明。我以前学的时候也会有时候很迷茫,觉得一个概念弄不清楚,比如说接口,我看了半天没发现接口的作用,看别人写的代码用接口了,没觉得怎么样,后来写数据库的时候发现了,定义了接口后可以修改里面的实现方法,既可以用JDBC有可以HIBERNATE,接口只一种约定,只要符合这样的约定的,用任何方法实现都可以,大大提高了灵活性。同样,在项目中,服务器端和客户端定了接口规范后,不需要去管另一方是怎么实现的,只要双方都实现了,就可以实现整体,至于效率性能问题,看各方能力,这里不谈论,嘿嘿。
  如何快速学好Android开发?不说题外话了,我觉得学android,首先心态要好,你不要想这我学个1个月,可以找个好工作,可以转钱了,牛人除外。一般的都应该想怎么样可以去最快的了解android,了解android的架构,了解他跟其他手机的一些区别,了解他的一些历史,然后你慢慢会有点兴趣,想了解更多的东西,然后你开始找资料,找视频,查百度,看见helloworld,看见TEXTVIEW,BUTTON,LISTVIEW都试试,等你觉得这些基础的都差不多理解了,那就别看书,看这API,然后自己设计个东西,可以涵盖他们的,做个自己想做的东西出来,虽然可能很难,但是你会在过程中学到很多,是别人教不会你的,比如你想让button有个什么事件监听,但是你暂时不知道方法,首先可以查API,虽然是英文的,看见有些还是看了懂的,这样你就会熟悉API,你觉得哪个好像有像,比如&xxxClickxx&,虽然你还是不明白,没关系,复制下来方法名,百度下,很多的,多看几个,印象深了,就掌握了。真的遇到什么思路上的问题,可以来论坛发帖,我们论坛肯定会有人来帮忙的,就算不能完全解决,也可以提供点参考。学习要会利用资源,论坛上那么好的资源不用可惜的哦,还有资料堆的东西,只要你能掌握70%,就是个牛人的,这个实话,不相信你试试。
  等学完了UI后,可以想想搞点数据的存储的东西,比如做个网络图片收集的,里面涉及到网络连接,图片保存,UI线程安全,数据库操作等等,又可以学到好多,何乐而不为呢。等学完这些,已经算不错了,接下去就要做点大的项目,最好是有客户端和服务器的,也练习下xml或者json的数据操作,了解下http协议,了解下wifi,了解下电话短信googlemap的等知识。
  当然你有兴趣的话可以在中间看看android的源码,很多,要很有耐心,这个我们后期可能会推出一个板块,专门讲解源码的。
  这些东西了解后,可能你会想到去做点游戏,那好啊,这个暂时不谈论,已经我会发帖就讨论怎么做游戏,将自己做的一些游戏开源,讲讲自己的游戏怎么做的。
  最后,等上层应用的东西基本学完了,学点底层的,驱动就给C的人去做吧,你就做点调用底层的东西JNI,深入了解下,就可以做很多东西了,比如3D游戏性能提高,编码解码等等。
微信扫一扫
您好,感谢关注凌阳教育,如果您要索取免费技术资料,请点击此处留言,谢谢!Android游戏快速入门(二):绘制动态文字和图片
这一讲我将带着大家来实现文字和图片的绘制,然后试着让文字和图片在屏幕里动起来。虽然,离真正的游戏还有一段距离,但是,这些都是游戏的基础,所以,大家都是需要掌握的。好的,不多说了,一起进入正题吧!
完成这一讲的任务,我们需要掌握如下一些概念,然后我会分别进行讲解。
& & 文字层
& & 贴图层
View对象:自定义显示控件
& & onDraw()方法:执行一系列绘制
Canvas对象:画布,呈现数据
& & Paint:画笔对象
& & drawText:绘制文字
& & drawBitmap:绘制贴图
SurfaceView对象
& & SurfaceHolder.Callback
Thread:线程让画面动起来
二、层的概念
学习photoshop的朋友肯定都知道层的概念,用通俗的话来说,层就是一个透明的玻璃纸。在android游戏中层的概念跟photoshop中也很相似,它可以用来呈现文字、图片等元素。游戏中一般都会有很多层组成,每个层中会有不同的元素,而且每个层中的元素是独立可控的。比如:在打飞机游戏中,背景是一层,玩家飞机是一层,敌机也是一层。大家要注意:层是有层次关系的,上面层会覆盖下面的层。那么,在打飞机游戏中,背景肯定是最里面一层,其他任何游戏元素都呈现在背景的上面。
另外有一点要跟大家特别讲一下,就是关于图片素材问题,我们都知道图片都是正规的矩形,而且有背景,所以在场景中肯定会有颜色块,看起来很不逼真。但是PNG格式的图片是可以做成透明背景,这样就解决这个问题,这也就是为什么android的图片素材基本上都是PNG格式的原因。
文字层:显示文字内容的层
贴图层:显示图片元素的层
但是,常常文字层和贴图层分的不是很清楚,文字层也可以绘制贴图,贴图层也可以绘制文字。
三、View对象
在普通的应用开发中似乎很难直接接触到View类,但实际上几乎所有的Android显示组件都是继承View类,TextView, EidtView, ImageView等等都是继承View类。开发中我们常常在XML文件中使用这些组件,但是如果要让组件具有更多独特的功能就需要自定义View类来扩展我们的需求了。
在Android游戏当中充当主要的除了控制类外就是显示类,在J2ME中我们用Display和Canvas来实现这些,而在Android中涉及到显示的为View类,Android游戏开发中比较重要和复杂的就是显示和游戏逻辑的处理。那么,我们首先研究显示的问题。
首先创建一个游戏主战场:GameView 类,并继承View类,结构如下:
package cn.zkyc.android. &
import android.content.C &
import android.view.V &
public class GameView extends View { &
& & public GameView(Context context) { &
& & & & super(context); &
接下来我们要将上面创建的GameView类显示到手机屏幕上。需要在入口Activity中进行调用。项目创建的时候我就已经设定了一个主Activity,名称为:GameStartActivity,代码结构如下:
package cn.zkyc.android. &
import android.app.A &
import android.os.B &
public class GameStartActivity extends Activity { &
& & @Override &
& & public void onCreate(Bundle savedInstanceState) { &
& & & & super.onCreate(savedInstanceState); &
& & & & &&
& & & & // 默认是加载XML配置文件,显示的也是XML文件中的视图组件 &
& & & & //setContentView(R.layout.main); &
& & & & //显示自定义的View,只需要将XML文件换成自定义的View对象就即可,如下: &
& & & & GameView gameView = new GameView(this); &
& & & & setContentView(gameView); &&
运行Application,效果如下:
很遗憾,页面中除了title什么也看不到。实际上,我只是测试自定义View是否能够正确显示,只要程序没有bug,就算是成功。(请看代码中的注释)
好的,接下来我们就在View里面展现一些内容,这个时候就要用到View对象中的onDraw方法,在自定义的GameView对象中必须覆盖父类View中的onDraw方法。接下来,你想展现任何内容都可以在此方法中进行了。假如,我想在屏幕的(100,100)处绘制蓝色文字:&飞机大战&,在屏幕的(100,200)处绘制一个半径10像素的红色圆。
@Override &
protected void onDraw(Canvas canvas) { &
& & & & super.onDraw(canvas); &
// 画笔对象,可以控制颜色和文字大小 &
& & & & Paint paint = new Paint(); &
& & & & // 给画笔设置系统内置的颜色:蓝色 &
& & & & paint.setColor(Color.BLUE); &&
& & & & // 文字左上角的坐标为(100,100) &
& & & & canvas.drawText(&飞机大战&,100, 100, paint); &
& & & & &&
& & & & //将画笔颜色调成红色 &
& & & & paint.setColor(Color.RED); &&
& & & & // 圆心点坐标为(100,200) &
& & & & canvas.drawCircle(100, 200, 10, paint); &&
运行效果如下图:
到目前为止,你已经可以在自定义的GameView中绘制文字和各种图形了,但游戏中都是大量的图片素材,对于图片如何绘制呢?也很简单,Canvas类也提供了相应的drawBitmap方法。现在,我来绘制屏幕的(100,300)处绘制一个飞机图片。只需要在ondraw方法中添加如下代码即可:
//加载资源图片图片 &
Bitmap heroBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.hero1); &
// 在(100,300)处绘制图片 &
canvas.drawBitmap(heroBitmap, 100, 300, paint); &
运行效果如下图:
对于代码中还有Canvas和Paint两个类没有细讲,我们可以这样打个比方吧,假如Canvas是一个画家,那么Paint就是画家手中的笔。画家能够画出各种景象(文字,形状,贴图等等),就要用到不同的画笔和不同的颜色。通过画笔类Paint就可以调整颜色,字体样式,字体大小等等。
我们发现绘制贴图canvas.drawBitmap(heroBitmap, 100, 300, paint);也会用到paint对象,但实际上paint起到的作用不大,我们完全可以忽略。
这种写法也是对的:canvas.drawBitmap(heroBitmap, 100, 300, null);
具体的用法代码里面已经有了,我就不再多说了,大家可以亲自查询下Android SDK API。
四、Thread:让画面动起来
上面我们已经实现了自定义的View中绘制了文字、形状和贴图,但是一切都是静止的,跟游戏还差的很远,意义不是很大。那么,接下来我就带着大家一起来让画面动起来。
实现这个目标,我们需要用到一个在游戏开发中非常重要的机制,就是多线程机制。具体多线程实现方式,不是我们现在讨论的问题,如果还不是很明白就需要自己补补线程方面的知识了。
在这里我们采用GameView类直接实现Runnable接口的方式:
public class GameView extends View implements Runnable { } &
默认必须实现run方法:
public void run() { &
& & while(true){ &
& & & & // 不断的调用View中的postInvalidate方法,让界面重新绘制 &
& & & & this.postInvalidate(); &
& & & & try { &
& & & & & & // 暂停0.5秒继续 &
& & & & & & Thread.sleep(500); &
& & & & } catch (InterruptedException e) { &
& & & & & & e.printStackTrace(); &
& & & & } &
postInvalidate() :此方法是View类中的方法,功能是触发调用onDraw方法实现界面重绘。
只要在每次重绘之前对层中对象的位置、形状、颜色或者透明度进行修改, 而且在一秒钟之内完成几十次的重绘,人的眼睛根本无法分辨,所以流畅的动画效果就产生了。动画片和电影也是这个原理。
现在我想让上面场景中的小球每隔0.5秒钟改变一次透明度和颜色,飞机垂直向上飞行10dp,效果如下:
完整的代码如下:
package cn.zkyc.android. &
import java.util.R &
import android.content.C &
import android.graphics.B &
import android.graphics.BitmapF &
import android.graphics.C &
import android.graphics.C &
import android.graphics.P &
import android.view.V &
public class GameView extends View implements Runnable{ &
& & Random rand = new Random(); &&
& & private int dx = 0 ; & // x轴移动像素 &
& & private int dy = 0 ; & // y轴移动像素 &
& & &* 必须要覆盖View中一个构造方法&
& & &* @param context&
& & public GameView(Context context) { &
& & & & super(context); &
& & & & &&
& & & & //启动线程 &
& & & & new Thread(this).start(); &
& & @Override &
& & protected void onDraw(Canvas canvas) { &
& & & & super.onDraw(canvas); &
& & & & // 画笔对象,可以控制颜色和文字大小 &
& & & & Paint paint = new Paint(); &
& & & & &&
& & & & // 给画笔设置系统内置的颜色:蓝色 &
& & & & paint.setColor(Color.BLUE); &&
& & & & // 文字左上角的坐标为(100,100) &
& & & & canvas.drawText(&飞机大战&,100, 100, paint); &
& & & & &&
& & & & //将画笔颜色调成红色 &
& & & & //paint.setColor(Color.RED); &&
& & & & //ARGB : A:透明度 、R:红色、G:绿色、B:蓝色。取值范围都在:0 ~ 255 &
& & & & paint.setARGB(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255), rand.nextInt(255)); &
& & & & // 圆心点坐标为(100,200) &
& & & & canvas.drawCircle(100, 200, 10, paint); &&
& & & & &&
& & & & //加载资源图片图片 &
& & & & Bitmap heroBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.hero1); &
& & & & // 在(100,300)处绘制图片,dy值控制在y轴上的位置 &
& & & & canvas.drawBitmap(heroBitmap, 100, 300+dy, null); &
& & @Override &
& & public void run() { &
& & & & while(true){ &
& & & & & & //修改下dy的坐标,方向向上,所以dy不断减,每次上移10dp &
& & & & & & dy -= 10; &&
& & & & & & // 不断的调用View中的postInvalidate方法,让界面重新绘制 &
& & & & & & this.postInvalidate(); &
& & & & & & //this.invalidate(); 此方法要求在UI主线程调用 &
& & & & & & try { &
& & & & & & & & // 暂停0.5秒继续 &
& & & & & & & & Thread.sleep(500); &
& & & & & & } catch (InterruptedException e) { &
& & & & & & & & // TODO Auto-generated catch block &
& & & & & & & & e.printStackTrace(); &
& & & & & & } &
& & & & } &
到此,实际上我们已经完成了我们的任务,但是并没有考虑到系统运行效率等问题。下面我将带着大家学习一下高效且更适合做游戏开发的SurfaceView类。
五、SurfaceView对象
Surfaceview类是View类的一个子类,我们来看看API的层级关系:
1、SurfaceView的特点
可以在主线程之外的线程中向屏幕绘图上。这样可以避免画图任务繁重的时候造成主线程阻塞,从而提高了程序的反应速度
2、实现方式
定义一个游戏场景类继承SurefaceView ,同事实现SurfaceHolder.Callback接口。因为使用SurfaceView有一个原则,所有的绘图工作必须在Surface 被创建之后才能开始(Surface这个概念在 图形中常常被提到,基本上我们可以把它当作显存的一个映射,写入到Surface 的内容可以被直接复制到显存从而显示出来,这使得显示速度会非常快),而在Surface 被销毁之前必须结束。所以Callback 中的surfaceCreated 和surfaceDestroyed 就成了绘图处理代码的边界。
3、需要重写的几个方法:
//在surface的大小发生改变时激发
1) &public void surfaceChanged(SurfaceHolder holder,int format,int width,int height){}
//在创建时激发,一般在这里调用画图的线程。
2) &public void surfaceCreated(SurfaceHolder holder){}&
//销毁时激发,一般在这里将画图的线程停止、释放。
3) &public void surfaceDestroyed(SurfaceHolder holder) {}
4、整个代码过程逻辑:
--&继承SurfaceView并实现SurfaceHolder.Callback接口&
--& SurfaceView.getHolder()获得SurfaceHolder对象&
--&SurfaceHolder.addCallback(callback) 添加回调函数
--&SurfaceHolder.lockCanvas()获得Canvas对象并锁定画布
--& Canvas绘画&
--&SurfaceHolder.unlockCanvasAndPost(Canvas canvas)结束锁定,并提交改变,将图形显示。
5、SurfaceHolder
这里用到了一个类SurfaceHolder,可以把它当成surface的控制器,用来操纵surface。处理Canvas上的效果和动画,控制表面,大小,像素等。
几个需要注意的方法:
& & // 给SurfaceView当前的持有者一个回调对象。
1) &abstract void addCallback(SurfaceHolder.Callback callback);
// 锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面画图等操作了。
2) &abstract Canvas lockCanvas();
// 锁定画布的某个区域进行画图等,因为画完图后,会调用下面的unlockCanvasAndPost来改变显示内容。
// 相对部分内存要求比较高的游戏来说,可以不用重画dirty外的其它区域的像素,可以提高速度。
3) &abstract Canvas lockCanvas(Rect dirty);
// 结束锁定画图,并提交改变。
4) &abstract void unlockCanvasAndPost(Canvas canvas);
6、我们把上面View的实现功能改为SurfaceView来重新实现
package cn.zkyc.android. &
import java.util.R &
import android.content.C &
import android.graphics.B &
import android.graphics.BitmapF &
import android.graphics.C &
import android.graphics.C &
import android.graphics.P &
import android.view.SurfaceH &
import android.view.SurfaceHolder.C &
import android.view.SurfaceV &
public class GameSFView extends SurfaceView implements Callback, Runnable { &
& & private SurfaceHolder surfaceH &
& & private Random rand = new Random(); &
& & private int dx = 0, dy = 0; &
& & public GameSFView(Context context) { &
& & & & super(context); &
& & & & surfaceHolder = this.getHolder(); // 获取SurfaceHolder对象 &
& & & & surfaceHolder.addCallback(this); // 添加回调 &
& & @Override &
& & public void run() { &
& & & & &&
& & & & while(true){ &
& & & & & & dy -= 10; //修改下dy的坐标,方向向上,所以dy不断减,每次上移10dp &
& & & & & & draw(); //调用重绘 &
& & & & & & try { &
& & & & & & & & Thread.sleep(500); &
& & & & & & } catch (InterruptedException e) { &
& & & & & & & & // TODO Auto-generated catch block &
& & & & & & & & e.printStackTrace(); &
& & & & & & } &
& & & & } &
& & &* 自定义绘制方法&
& & public void draw() { &
& & & & synchronized(surfaceHolder){ &
& & & & & & // 获取Canvas对象 &
& & & & & & Canvas canvas = surfaceHolder.lockCanvas(); // 锁住Canvas &
& & & & & & &&
& & & & & & //清理背景,游戏中将换成具体的背景贴图 &
& & & & & & canvas.drawColor(Color.BLACK); &
& & & & & & &&
& & & & & & // 画笔对象,可以控制颜色和文字大小 &
& & & & & & Paint paint = new Paint(); &
& & & & & & // 给画笔设置内置的颜色:蓝色 &
& & & & & & paint.setColor(Color.BLUE); &
& & & & & & // 文字左上角的坐标为(100,100) &
& & & & & & canvas.drawText(&飞机大战&, 100, 100, paint); &
& & & & & & // 将画笔颜色调成红色 &
& & & & & & // paint.setColor(Color.RED); &
& & & & & & // ARGB : A:透明度 、R:红色、G:绿色、B:蓝色。取值范围都在:0 ~ 255 &
& & & & & & paint.setARGB(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255),rand.nextInt(255)); &
& & & & & & // 圆心点坐标为(100,200) &
& & & & & & canvas.drawCircle(100, 200, 10, paint); &
& & & & & & // 加载资源图片图片 &
& & & & & & Bitmap heroBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.hero1); &
& & & & & & // 在(100,300)处绘制图片,dy值控制在y轴上的位置 &
& & & & & & canvas.drawBitmap(heroBitmap, 100, 300 + dy, null); &
& & & & & & &&
& & & & & & surfaceHolder.unlockCanvasAndPost(canvas); &// 解锁Canvas,更新 &
& & & & } &
& & & & &&
& & @Override &
& & public void surfaceChanged(SurfaceHolder holder, int arg1, int arg2,int arg3) { &
& & & & &&
& & @Override &
& & public void surfaceCreated(SurfaceHolder holder) { &
& & & & // Surface创建成功启动线程 &
& & & & new Thread(this).start(); &
& & @Override &
& & public void surfaceDestroyed(SurfaceHolder holder) { &
& & & & &&
大家发现,飞机移动到顶部之后就不见了,请大家思考,如何让飞机飞过顶部之后还能从底部出来呢?

我要回帖

更多关于 android 属性动画 的文章

 

随机推荐