android手机游戏开发(精选14篇)
第一部分其实游戏就是厦门博看文思让状态机不断的让Canvas在View上画你想要的东西。这个状态机包括内部的执行,还包括外部的输入。
Android开发的MVC模式
1,通过View和SurfaceView来显示界面的视图。(处理界面与用户的交互事件,如,触笔点击,用户按键等。可通过View类的onKeyDown,onKeyUp,onTouchEvent等)。
2,用Activity来控制游戏的整体结构。
3,设计一个逻辑类,用来处理逻辑运算。
Android中任何一个View类都只有重写onDraw方法来实现界面显示。
Android中提供了
onKeyUp,onKeyDown,onKeyMultiple,onKeyPreIme,onTouchEvent,onTrackballEvent等方法。可以用来处理游戏中的事件消息。所以继承View时,需要重载这些方法。Android中提供了invalidate来刷新界面,但invalidate不能直接在线程中调用,违背单线程模型。
因此Android中最常用的方法是利用Handler来时更新UI界面。
第一部分View类
每个View类都有一个绘画的画布,在游戏中可以自定义视图View,任何一个View类都只需要重写onDraw方法来实现界面显示,可以是3D,也可以是文本。
游戏的核心就是不断的绘图和刷新,图我们可以通过onDraw方法绘制,刷新
Android中可以用invalidate方法来刷新界面,注意:invalidate不能直接在线程中调用,因其违背了
1 Android游戏开发
Android的开发支持多种操作系统[2,3]:Windows、Mac和Linux等。文中在Windows7操作系统下进行开发。
Android开发所需的工具为:(1)JDK。Java开发工具包,Android 应用软件大部分由Java 语言所编写,因此开发Android 应用程序首先需要Java 开发包的支持。(2)Eclipse。Android 的集成开发环境Eclipse提供了专用的开发插件ADT(Android Development Kit),对Android的开发必须要有Eclipse 的支持。(3)Android SDK(Software Development Kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台及操作系统等建立应用软件开发工具的集合[4]。
2 Android系统下游戏的设计
2.1 旋转积木流程设计
游戏主流程如图1和图2所示。其中图2为图1的补充,是玩家进入游戏后的流程图[5]。
2.2 游戏总体架构设计
游戏使用SurfaceView作为主要视图的基类,使用双缓冲技术实现界面绘制。根据在游戏中的不同功能,将其划分为控制调度模块、声音播放模块、图形界面模块、逻辑计算模块和动画效果模块[6]。游戏总体功能架构如图3所示。
2.3 游戏类框架设计
2.3.1 游戏主体类设计
游戏主体类设计主要分为以下几个模块[7,8]:(1)控制调度模块。MainActivity:主要实现游戏状态的转换,控制各界面间的切换。(2)图形界面模块。LogosView:实现游戏欢迎界面的动画效果,同时引出后续内容。MainMenu:负责游戏主菜单界面的展示,并对不同按钮事件进行监听,同时响应相对应的逻辑。MySurfaceView:负责游戏界面的展示,并在不断的绘制所展示状态的变化。各组件相关类:负责游戏中各个组件的绘制、更新等。(3)逻辑运算模块。Cube:负责判断积木是否到达目的位置或翻转到地图以外。(4)动画效果模块。WinDrop:实现进入获胜界面前的相关动画;DropOff:实现进入失败界面前的相关动画;LogosView:实现游戏欢迎界面的动画效果。
2.3.2 游戏界面相关类关系
游戏界面绘制是将各个独立的组件相结合,进而绘制出的,其中含一个主控制类,即MySurfaceView类在本游戏中,主要负责组件的协调、绘制。
3 游戏测试
3.1 游戏的测试
对于Android软件的测试工具可分为两种:一是通过安装AVD、进行测试;二是直接通过Android手机进行测试。本设计中,选用通过AVD进行测试。
3.2 游戏的运行
启动模拟器,进入游戏主菜单界面,其中包括对游戏操作的多项选择,如图4所示。
4 结束语
文中以“旋转积木”游戏为例,介绍了基于Android系统手机游戏设计的总体流程,并详细介绍了游戏框架设计及各类模块的具体功能实现。在设计开发的同时,着重介绍了游戏中所使用的Android关键技术,利用该技术对游戏界面进行绘制,在游戏中通过OpenGL进行3D绘图,增强了游戏界面的感染力,同时还广范应用多线程机制,使得多个任务并发处理,提高了游戏效率,为玩家提供了较好的用户体验。
参考文献
[1]RICK R.Android应用开发[M].李耀亮,译.北京:人民邮电出版社,2010.
[2]杨丰盛.Android应用开发揭秘[M].北京:机械工业出版社,2010.
[3]裴佳迪,马超,孙仁贵.Android应用开发全程实录[M].北京:人民邮电出版社,2012.
[4]李宁.Android开发权威指南[M].北京:人民邮电出版社,2012.
[5]吴亚峰,苏亚光.Android游戏开发大全[M].北京:人民邮电出版社,2012.
[6]韦斯.数据结构与算法分析Java语言描述[M].冯瞬玺,译.北京:机械工业出版社,2009.
[7]陶漪,恽如伟.教育游戏设计理论的分析与运用[J].远程教育杂志,2008(2):75-78.
关键词:Android SurfaceView 游戏开发
近年来,Android平台越来越火爆,其市场份额已占全球第一。随着科技水平的进步和android平台的领先,Android的游戏开发是程序员的新的发展方向。Android普通程序开发的UI线程更新画面,是由程序后台控制,这是被动更新画面。简单的棋牌类游戏开发可以,但是实时互动的游戏就需要自我掌控屏幕的刷新。而SurfaceView类就是在这种情况产生的,它在一个新启动的线程中重新绘制画面,主动更新画面。
一、SurfaceView简介
说到SurfaceView类,就需要先介绍下它的父类View,View一般在onDraw方法里面绘图,onDraw在UI主线程执行。onDraw默认只在View初始化的时候调用一遍,所以View不会自动刷新画面,一般要调用invalidate或者postInvalidate来重新执行onDraw里面的代码进行刷新画面。SurfaceView也可以在onDraw方法里面绘图,即直接在UI主线程绘图并渲染,因为SurfaceView是View的子类。上面已经介绍,绘图完毕后只能在UI主线程内渲染到屏幕上。为了不阻塞主线程,我们可以考虑采取这样的方案:在后台线程执行繁重的绘图任务,把所绘制的东西缓存起来;绘图完毕后,再回到UI主线程,一次性把所绘制的东西渲染到屏幕上。(本质就是后台线程绘图,UI主线程渲染)只使用View的onDraw方法是无法实现这种方案的,而SurfaceView可以实现这种方案。
先看看SurfaceView的工作原理图:
首先,SurfaceView使用Canvas对象进行绘图;由图可以看出,Canvas在后台线程绘制的东西先缓存到Surface中。其次,让Surface回到UI主线程渲染到屏幕上。因此,要有Surface对象存在,才能够在屏幕上显示图案。
二、SurfaceView在代码中各成员解释
(一)Surface与SurfaceHolder对象
Surface是SurfaceView里面的一个成员变量,它的创建和销毁过程都是自动的。Surface的主要作用是缓存Canvas绘制的东西,并渲染到屏幕上。SurfaceHolder对象通过类SurfaceView的getHolder()函数获得。
(二)后台绘图线程的开启与销毁
在Surface被创建的时候,开启绘图线程。在Surface被销毁的时候,销毁绘图线程。因为没有Surface,绘制再多的东西也无法渲染到屏幕上。既然要在创建Surface时开启绘图线程,在销毁Surface时销毁绘图线程。那就需要监听Surface的生命周期,使用SurfaceHolder对象的addCallback()来添加Surface的生命周期监听器——SurfaceHolder.Callback
(三)Callback的成员函数
1.Surface的大小发生改变时调用surfaceChanged
2.Surface创建时调用,一般在这里开启绘图线程surfaceCreated
3.Surface销毁时调用,一般在这里销毁绘图线程surfaceDestroyed
三、实例的具体实现步骤及代码实现
(一)1SurfaceView使用步骤
1.新建一个继承SurfaceView的类——GameView
2.得到SurfaceHolder对象,并监听Surface的生命周期
3.开启绘图线程、销毁绘图线程
4.在run方法中尝试进行绘图
5.动态刷新屏幕
(二)具体代码实现:
1.MainActivity,主要Activity
class MainActivity extends Activity {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(new MyView(this));
2.MySurfaceView
class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback{
SurfaceHolder holder;
public MyView(Context context) {
super(context);
holder = this.getHolder();//获取holder
holder.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { }
@Override
public void surfaceCreated(SurfaceHolder holder) {
new Thread(new MyThread()).start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) { }
}
3.MyThread
class MyThread implements Runnable{
@Override
public void run() {
Canvas canvas = holder.lockCanvas(null);//
获取画布
Paint mPaint = new Paint();
mPaint.setColor(Color.BLUE);
canvas.drawRect(new RectF(40,60,80,80), mPaint);
holder.unlockCanvasAndPost(canvas);//解锁画布,提交画好的图像
}
}
本文对Android系统的游戏开中的SurfaceView类进行了分析,对于SurfaceView在游戏开发中与View的区别做了简单说明,最后给出一个简单的例子作为学习的样例,为能够给游戏开发人员提供一点启示。
参考文献:
[1](美)Shane Conder(美)Lauren Darcey .Android移动应用开发入门到精通人民邮电出版社,2010.
[2]胡必波.基于Android系统的手机游戏设计与实现[D]. 华南理工大学.
Android是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统,早期由Google开发,后由开放手持设备联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件迭层)的架构,主要分为三部分。底层Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以Java编写。
2010年末数据显示,仅正式推出两年的操作系统Android已经超越称霸十年的诺基亚(Nokia)Symbian OS系统,采用Android系统主要手机厂商包括宏达电子(HTC)、三星(SAMSUNG)、摩托罗拉(MOTOROLA)、LG、Sony Ericsson、魅族M9等,使之跃居全球最受欢迎的智能手机平台,Android系统不但应用于智能手机,也在平板电脑市场急速扩张。
基于Android的通讯录开发教学视频 Android开发教程目录:
01_项目演示
02_增加界面01
03_增加界面02
04_增加界面03
05_显示图像选择框01
06_显示图像选择框02
07_显示图像选择框03
08_显示图像选择框04
09_保存用户信息01
10_保存用户信息02
11_保存用户信息03_讲解SQLiteOpenHelper
12_保存用户信息04
13_主界面的绘制01
14_主界面的绘制02
15_主界面的绘制03
16_主界面的绘制04
17_展现用户列表01
18_展现用户列表02
19_展现用户列表03
20_增加页面的跳转01
21_增加页面的跳转02
22_实现gallery无限循环
23_显示详细信息01
24_显示详细信息02
25_显示详细信息03
26_显示详细信息04
基于Android的通讯录开发教学视频大小:437MB
-->继承SurfaceView并实现SurfaceHolder.Callback接口
-->SurfaceView.getHolder获得SurfaceHolder对象
-->SurfaceHolder.addCallback(callback) 添加回调函数
-->SurfaceHolder.lockCanvas()获得Canvas对象并锁定画布
-->Canvas绘画
-->SurfaceHolder.unlockCanvasAndPost(Canvas canvas)结束锁定,并提交改变,将图形显示,
public class GameSFView extends SurfaceView implements Callback{
private SurfaceHolder surfaceHolder;
private int selectedX = 0;
private int selectedY = 0;
/**
* 单元格的宽度
*/
private float width;
/**
*单元格的高度
*/
private float height;
/**
*main.xml 中引用此surfaceview类 构造方法必须使用两个形参的形式
*/
public GameSFView(Context context, AttributeSet attrs) {
super(context, attrs);
surfaceHolder = this.getHolder(); // 获取SurfaceHolder对象
//监听Surface的生命周期 给SurfaceView当前的持有者一个回调对象。
surfaceHolder.addCallback(this); // 添加回调
}
}
实现三个回调函数
//在surface的大小发生改变时激发
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
//在创建时激发,一般在这里调用画图的线程。
//最好在Surface被创建的时候,开启绘图线程。
//子线程绘图 缓存到surface中
@Override
public void surfaceCreated(SurfaceHolder holder) {
draw();
}
//销毁时激发,一般在这里将画图的线程停止、释放。
//最好在Surface被销毁的时候,销毁绘图线程
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
自定义绘制方法
/**
* 自定义绘制方法
*/
public void draw() {
synchronized(surfaceHolder){
// 获取Canvas对象
// 锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面画图等操作了,
Canvas canvas = null;
Paint paint = new Paint();
try{
canvas = surfaceHolder.lockCanvas(); // 锁住Canvas
// 清理屏幕 绘制背景
initGameView(canvas, paint);
//重绘surfaceview 填充新增的数据
inflateNewNum(canvas,paint);
}catch(Exception e){
e.printStackTrace();
}finally{
if(canvas != null)
// 结束锁定画图,并提交改变。
surfaceHolder.unlockCanvasAndPost(canvas); // 解锁Canvas,更新
}
}
}
这里最好使用同步锁,并且在使用try catch finally 进行异常捕获。
private void initGameView(Canvas canvas,Paint paint){
//bgBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.background);
//初始化游戏背景
initGameBg(canvas,paint);
//初始化游戏线条
initGameLine(canvas,paint);
//初始化游戏数据
initFirstNumber(canvas,paint);
}
绘制棋盘上的线条
private void initGameLine(Canvas canvas,Paint paint) {
//设置画笔颜色
paint.setColor(Color.BLACK);
//画横线
for(int i=1;i<10;i++){
canvas.drawLine(0 ,i*height, getWidth(), i*height, paint);
}
//画竖线
for(int i=1;i<9;i++){
canvas.drawLine(i*height,0, i*height,getWidth(), paint);
}
//画三道横粗线
paint.setStrokeWidth(4);
for(int i=1;i<4;i++){
canvas.drawLine(0 ,i*height*3, getWidth(), i*height*3, paint);
}
//画三道竖粗线
for(int i=1;i<9;i++){
canvas.drawLine(i*height*3,0, i*height*3,getWidth(), paint);
}
首先我们要明确的一点是恢复出厂设置这个功能并不是经常使用的,因为如果误操作引起的后果是非常严重的,恢复出厂设置从字面上就可以理解,手机中的所有设 置将恢复到出厂状态,包括安装在手机上的软件、存储的联系人、接收的信息和Gmail,绑定的Gmail账号都将消失,完成后再次开机就会像刚首次开机一 样需要初始化设置,绑定Gmail账号,
因此这是手机遇到不可恢复的错误时才使用的功能,那么该如何操作呢?
这有两种方法,下面讲解第一种,首先进入手机的设置(Settings)中,选择SD卡和手机储存(SD Cardphone storage),再选择最后一项重设出厂数据(Factory data reset)即可。
近年来, Android系统的手机已被广泛使用。而且手机中或多或少装有传感器。利用手机中的传感器开发手机软件,会使手机的功能得到进一步的提升。结合流行的“2048”手机游戏, 介绍利用传感器, 实现转动手机使游戏界面的方块向上、向下、向左或向右的移动方法。其目的是介绍传感器参数的获取方法及利用传感器参数实现游戏程序的编写。 介绍的传感器使用虽较为简单, 但对手机传感器的其他软件开发具有借鉴意义。
2 传感器的类型与参数
2.1 手机传感器
在Android手机中通常装有以下传感器: 方向感应器、重力感应器、加速度感应器、光线感应器、 距离感应器、螺旋仪感应器、压力传感器。传感器的应用主要包括SensorMannager传感器管理对象 , 注册SensorEventListener , 实现SensorEventListener接口 , 手机中的所有传感器都须要通过SensorMannager来访问, 调用getSystemService可以返回对SensorMannager服务的引用【1】。即:
SensorManager sensorManage= ( SensorManager) getSystemService (SENSOR _SERVICE) ;
罗列手机的传感器, 代码如下:
2.2 手机传感器参数
对于手机中的传感器, 可以使用注册传感器的监听器,然后, 通过onSensorChanged事件返回被监听传感器的参数值。将返回的参数值应用在实际程序中。其返回值存放在values数组中。其参数值列举如下:
加速度传感器 (TYPE_ACCELEROMETER), 其返回值value [0]、value [1]、value [2] 分别代表沿着3个坐标轴方向的加速度值【2】。
压力传感器 (TYPE_PRESSURE), 其返回值value [0] 代表以千帕斯卡 (KP) 为单位的压力值。
温度传感器 (TYPE_TEMPERATURE), 其返回值value[0] 代表以摄氏度为单位的温度值。
类似地, 其他传感器其参数值也均由value数组获取。文中主要应用加速度传感器。
3 利用传感器编写手机游戏程序
结合“2048游戏”介绍传感器在游戏编程中的应用。
3.1 游戏界面
本程序的运行界面如图1所示, 其主要功能是: 翻动手机即可实现相同数字的累加。
3.2 传感器在游戏编程中的应用
介绍将加速度传感器应用于“2048游戏”中。实现这一方法的前提是: 手机中必须安装有加速度传感器。可利用上述介绍的方法检测手机中是否有加速度传感器。另外,“2048游戏”的原代码可从网络下载获取【3】。加速度传感器应用于“2048游戏”的方法是: 先对加速度传感器进行注册监听。然后在onSensorChanged事件中获取数组value的值。利用value [0]、value [1] 及value [2] 即可判断手机是向左、向右、向上或向下转动。为调整传感器的灵敏度, 在程序中设置间隔时间。当间隔时间不足指定值时, 放弃所获取的值。
3.3 主要代码
4 结语
介绍传感器参数的获取及应用。并结合简单的手机游戏,介绍手机传感器在手机开发中的应用。对进一步应用手机传感器开发软件系统具有借鉴作用。
摘要:介绍手机常用的传感器类型。讲解列举手机中传感器安装的方法,阐述手机传感器的参数及使用方法。以加速度传感器为例,讨论了手机传感器在游戏开发中的应用,详细分析了代码。对初学者有很大帮助。
蜻蜓 FM
重庆音乐广播对于成长在80年代的小编一点都不陌生,她伴随着我们度过每一个寂寞的夜晚,慵懒的音乐和温暖的咖啡总是最能打动人心,当网络成为人们娱乐的新手段时,慢慢退出人们生活的调频电台也把网络作为新兴的传输手段。
蜻蜓 FM本是 iOS 上最受欢迎的广播类应用之一,如今推出的Android版本丝毫不逊色iOS上的应用,不管是什么样的电台,这一个小小的应用都能帮我搞定。虽然能收听到全世界的调频电台的应用有不少,但我更喜欢蜻蜓换台时的个性操作,只需简单的三个步骤,各个电台模块就像幕布一样呈现在屏幕上,就像小霸王学习机那样其乐无穷,作为一款电台应用,它已经很优秀了。
果库
说实话,这款手机应用绝对是与钱包势不两立的小软件。“果库”能从浩如烟海的淘宝商品中精挑细选出最优质且最适合你的那部分,用最简单的界面,最方便的支付渠道,在午后咖啡短短的休闲时间内就能快速帮你的钱包“消肿”。
无论你是科技控,还是时尚女魔头,或者是人见人爱的小清新,它都可以满足你的需求。在肆无忌惮的购物欲望中,与优质的商品不期而遇。在触控式的网购精选中,能够只花少量的时间和精力就实现到颇费脚力的逛街运动,随便逛逛便可以轻松地为心爱的人选出惊喜礼物。就个人而言,相比它的购物功能来说,果库更像是贴身掌握的网购消费指南,能够提供更优质的生活主张。
找地儿
对于身边有路痴的朋友,如果把聚会地点选为一个新场所,通知到朋友肯定很麻烦。 “找地儿”就是为了应付这种情况而生的,对于喜爱探索的吃货来说,它真是如虎添翼的一件装备,启动迅速,界面优美,地图没有漂移,使用够简单,只要标注附近的地标,就可以通过短信通知到参加聚会的路痴朋友。
更方便的是这款应用无需注册,不用所有人都安装客户端,只要你选定一个位置,就可以用短信通知到你的朋友,最美好的是它还可以选一个目的地附近明显的地标做参照物,这样就可以把省下的时间都放在聚会中的喝酒吃肉打豆豆上而不是花在寻找地点上。
今天要给大家分享的是Android开发入门,小青青_Lo是我的微博昵称,如果觉得我讲得好,求互粉(*^__^*)嘻嘻~~
讲解大纲
这个是今天讲解的大纲,首先通过著名Hello world程序对Android开发有一个感性的认识,之后上升到理性认识,了解android开发的重要组成部分和基本开发流程。Android开发主要包括App组件,App资源和App的配置文件。App组件主要负责和用户交互,处理用户请求;而App Res主要负责用户界面的视图;App Manifest文件主要用来声明App运行所需环境,比如App包含哪些功能模块,API最低最高版本要求,比如Android操作系统版本要求运行设备的性能要求,比如屏幕分辨率,内存空间大小等,用户是否有权限访问一些系统应用程序和系统数据,比如通讯录,GPS位置信息,本地通知服务等。
在讲解Android开发的重要组成部分的过程中会涉及一些简单的实例现场演示来讲述Android开发的基本流程。
欢迎提问
因为我本身是一个Android开发的新手,在加上本身写代码写得少,所以难免会有一些错误和讲得不清楚得地方,欢迎大家提出疑问,提问有奖。如果我答不出来,记下来分享后查资料给大家回答。
先做加法讲清楚,之后做减法,言简意赅,严格控制时间
讲清楚,do better
为什么要学习Android开发?(此段可以精简下)
Android操作系统目前占移动操作系统78%的市场份额,这个充分说明了android开发市场大需求广。现在大家都知道移动互联网是大势所趋,每天坐公交地铁,一眼望去大家都在忙于刷手机ipad就已经充分说明这点,随着移动互联网的兴起,App开发自然是大势所趋。Android操作系统之所以发展如此迅速,和其开源有着密不可分的关系,开源意味着便于扩展和学习,以及使用。
之后我们简单介绍下Android系统架构,一共分为四层,最下层的是linux内核,负责内存管理,进程调度,网络协议以及各种设备驱动等,再上面是各种系统运行库,其主要是应用框架层和linux内核的重要纽带,而我们下载的android SDK处于应用框架层,主要负责给android应用开发提供各种基础服务,我们平时使用的微博,微信等app应用程序就处于应用层。简要介绍了android系统,我们现在开始anroid开发之旅。部署Android开发环境
Android开发第一步就是部署android开发环境,部署android开发环境有两种方式:方法一是JDK+android studio, 方法二是JDK+SDK+Eclipse。我们现在比较下这两种的特性,首先从部署便捷性来看AndroidStudio要比安装SDK步骤少,更方便简单。之前小超分享框架的时候说应用性和性能一般成反比,Android Studio的IDE好用,这同样意味着其性能比SDK的要低,所以其编译运行速度Eclipse显然比Android Studio快,内存消耗低。运行Android Studio一般将我可怜本本拖垮。如果从开发效率来看,方法一显然要高于方法先做加法讲清楚,之后做减法,言简意赅,严格控制时间
讲清楚,do better 二,从代码架构来看,AS的Java/resoure/Manifest三个文件夹就一一映射了Android开发的三个重要组成部分,而Eclipse的代码架构相比之下稍显混乱。而且Android Studio的UI可视化也比Eclipse的更为强大好用。对于运行机器要求,显然Android Studio比JDK的要求高。
综上所述,AS作为google的官方开发工具,再者从大家最关心的开发效率来看,AS是Android开发的IDE最佳之选
AS是基于IDEA的,好好看看AS好在哪!
http://java.dzone.com/articles/why-idea-better-eclipse
首先创建工程(1)建立一个工程
FileNewAndroid Application Project
运行程序,选中app,右键点击菜单选择run asAndroid Application.注意此时需要将Android手机通过usb接口连接到电脑上,而且选择允许调试,即可在手机上安装运行的app,从而看到运行效果。
先做加法讲清楚,之后做减法,言简意赅,严格控制时间
讲清楚,do better
(2)分析代码架构(src/res/Manifest File)
src: java code, 主要负责实现App的组件(Activity,Broadcast,ContentProvider,Service etc)和数据存储(文件存储,db存储,shared Preference),完成用户界面内的相关交互。
res: layout,values,drawable etc, 主要负责UI布局,都是xml格式的文件。Manifest File:主要是配置App的运行环境。Api的版本需求,App的访问权限,App所包含的组件,设备特征的相关权限等(3)建立并运行一个activity 先做加法讲清楚,之后做减法,言简意赅,严格控制时间
讲清楚,do better PS:首先注意到此处有一个黄色感叹号,说明此程序有警告,如果是一把红叉叉,就是程序包含错误,需要修复。此处有警告,是因为使用了低版本的类ActionBarActivity,所以类名上面有横线,在此处我们修改为Activity类,然后按快捷键ctrl+shift+O,自动import该类的命名空间。此时发现import android.app.Activity;并且黄色的感叹号消失了。
Android开发重要组成部分
接下来我们进一步了解Android开发,Android开发的重要组成部分。Android组件主要包括活动,广播,服务和内容提供器。这四大组件是组成App的基础功能模块,而intent和intent-filters是用来衔接各个功能模块组件,负责组件之间的交互和通信。
如果是组件是负责逻辑控制,那么App Res主要负责用户界面视图,在此会介绍构成视图的资源类型,以及各个资源的组成方式;之后还会介绍如何在代码中访问资源。由于运行app的设备分辨率不同,语言不同,操作系统版本不同等原因,需要考虑到资源如何对各种不同设备的硬软件兼容。
最后我们简单介绍下配置文件的作用。Manifest文件主要是用来声明App运行环境要求,支持什么版本的api,app包含哪些组件,需要哪些用户权限等。Activity的定义
首先我们来看四大组件中最常见的Activity, 在SDK的官方文档是这样定义Activity的,其主要是提供一个可以让用户进行交互完成某些请求的用户界面。比如说用户在拨打电话,拍照,发送邮件,看地图的时候都需要一个用户界面,通过这个界面用户可以和app进行对话,发出请求,app响应请求。同样在刷先做加法讲清楚,之后做减法,言简意赅,严格控制时间
讲清楚,do better 微博的时候我们也可以处处看到Activity,微博feed流,点击消息进入消息箱。简而言之,Acivity是承载某个功能的UI和交互的一个容器,在app中看到的是一个用户交互界面。Activity状态和生命周期
Activity一共有三种状态,当Activity处于前端的时候,也就是获取用户焦点的时候,其状态为Resumed,此时处于前端生命周期,而当其失去用户焦点,但是还是部分可见的时候,其状态为paused,此时不属于前端生命周期,而属于可见生命周期范围内,而当其失去用户焦点,又不可见的时候,此时就是stoped。从创建到stop整个过程为完整生命周期。
我们可以看一个例子。
主界面获取用户焦点
主界面不可见失去
先做加法讲清楚,之后做减法,言简意赅,严格控制时间
讲清楚,do better
对于组件的用法主要分为三步:(1)实现组件类
(2)在Manifest或者代码中注册组件(3)在活动中启动或者触发组件
如何使用Activity(见demo)
(1)创建UI—second.xml(2)创建SecondActivity(3)启动一个activity
前面我讲到要从主界面而跳转到第二个界面,也就是从第一个活动跳转到第二个活动,这个时候需要intent来衔接各个组件,完成组件之间的交互。
先做加法讲清楚,之后做减法,言简意赅,严格控制时间
讲清楚,do better 首先我们来看下官方sdk上对intent的定义,intent是指向其他app发出动作请求,四大组件中的活动,服务和广播都是由intent来启动(此处没有讲清楚呀!)也因此intent有广泛的应用,比如
– 从微博feed流跳转到消息箱 – 启动本地通知服务,闹钟备忘录服务 – 发微博晒照片跳转照相机程序
– 密码变更的时候,发送强制下线的广播…
Intent的类型
Intent包含两种类型,显式intent和隐式intent,显式intent是指通过组件类名来启动组件。然后隐式的intent是通过声明组件要执行的动作,android系统根据要执行的动作找到相应的组件启动之。
什么也不多说,我们看看代码。从代码中也可以看出显示intent和隐式intent的区别。一个是从主界面跳转到第二个页面,一个是先在Manifest声明跳转的动作,系统找到符合条件的活动进行启动。隐式intent活动启动的原理
我们通过一个图来看看隐式intent启动活动的原理,如图所示:
[1] Activity A 通过一个Action的描述创建Intent,并将其传给startActivity.[2] 安卓系统搜索所有activity的intent filters,看是否这个intent中的action [3] 如果ActivityB 符合,则将启动Activity B
运行一个intent 先做加法讲清楚,之后做减法,言简意赅,严格控制时间
讲清楚,do better 如果要build一个intent,要么采用显式的intent通过组件类名进行启动。要么描述组件要执行的动作或者种类信息,系统找到满足条件的组件进行相关的启动,可能执行某些动作的时候还需要携带一些数据。
Intent的用法
Intent可以用来启动一个活动,也可以用于启动一个服务,或者将其余服务进行相关的绑定,或者发送广播,或者在这个过程中传递或者返回数据。具体会在后续进行相关的讲述。
Pendingintent的定义和应用
PendingIntent是指在intent对象外包了一层。Pendingintent最初的目的是用于授权外部程序可以使用内部的intent,就好像这个intent是内部调用,然后在内部进程内执行的。
其主要应用场景有:
一个是用于声明本地通知服务时所需的intent代码 另一个是用于声明定时任务触发的intent 最后是声明与控件交互的intent
Broadcast的定义和应用
广播接收器是指可以用来接收系统范围内的广播通知的组件。广播的应用有:
先做加法讲清楚,之后做减法,言简意赅,严格控制时间
讲清楚,do better 一些是来自系统的广播,比如说提示app电量过低,提示网络中断,不能再正常刷微信微博,开机时通知某些app自动启动。
有一些是应用程序广播或者本地广播,所谓本地广播是指程序内部的广播。比如当通知所有的活动强制下线等。
Broadcast的运行流程
Broadcast的运行流程包括发送广播,注册广播接收器和接收广播。发送广播主要是通过intent来进行广播的发送,注册广播接收器有两种方法,一种是在manifest中静态注册的方法,在manifest中声明接收器的类名以及相关动作。一种是在代码中动态注册的方法,在代码中创建intent-filter,并创建广播接收器对象,用这两个参数注册广播接收器;最后接收广播,就需要实现广播接收器的类,其中最重要是重载onReceive函数,里面是处理当接收到广播的时候如何处理。
ContentProvider的定义和应用
ContentProvider主要是提供访问外部数据的标准接口。
ContentProvider主要适应于当需要将一些复杂的数据或文件提供外部程序使用时,出于安全的考虑,提供contentprovider作为外部程序访问内部数据的接口。当只是在内部完成一些数据的读写,此时是不需要provider的。
ContentProvider的运行过程:
先做加法讲清楚,之后做减法,言简意赅,严格控制时间
讲清楚,do better
1.App0 给其他app提供了一些数据。
2.App1和App2都想访问App0内部的数据,但App1因为没权限而无权访问,App2在manifest中声明了其访问权限。
3.为了App0内部数据安全,App0给外部程序提供了访问内部数据的标准接口即ContentProvider。
4.App2通过getContentResolver转化content URI中的provider authority和path,并与已知的providers匹配,从而找到所需要的provider,从而成功访问App0的内部数据。ContentProvider的用法:
首先设计相关的数据结构——文件或者结构化数据。
之后就是设计内容的URI,实现provider的类,之后就是定义provider的属性,并且在manifest文件中注册相关的provider。
最后使用getContentResolver来找到正确的provider,我们可以通过一个通讯录的例子来进行相关的了解。
Service的定义和应用
服务主要指在后台长期运行的程序。
先做加法讲清楚,之后做减法,言简意赅,严格控制时间
讲清楚,do better 服务的应用有本地通知服务,定时任务服务和后台应用程序等。
Service的生命周期以及服务的相关用法
服务的生命周期分为完整生命周期和活跃生命周期,完整生命周期是指从服务创建到服务销毁。如果某个服务在某个活动启动,即使是活动被销毁了,这个服务也依然存在,比如push服务,即使没有停留在app前端,push服务也是在后台运行的。
而活跃生命周期是指从服务绑定到服务解绑的整个过程。
Service的相关用法:
实现服务类,在manifest中注册服务组件,并且在活动中启动或者绑定某项服务。
你会发现所有的组件的使用,基本都是实现具体组件类,然后再manifest中注册或者在代码中注册,之后在活动中通过intent启动相关的组件。
资源Resources Res用于构建我们看到的用户界面视图,我们将从以下三个方面来讲述:资源类型,设备兼容性,以及如何在代码中使用Resource,我们对照右图,可以看出资源有布局,有字符串,有调色板等,除了资源的种类,资源还会考虑设备的兼容性,比如说根据屏幕分辨率——分为hdpi的调色版,ldpi的调色板等,根据系统语言,字符串的分为英语,中文,日语的等,而由于不同设备上安装的是不同版本的android操作系统,自然资源要适配各种不同版本的api,比如先做加法讲清楚,之后做减法,言简意赅,严格控制时间
讲清楚,do better values-v11,values-v14等
为了更好的用户交互,有时候我们要获取资源,比如实现点击登录按钮跳转到微博主页,我们必须获取登录按钮,针对这个按钮先点击事件。那如何获取到登录按钮呢?也就是如何获取到按钮资源呢?在Android开发中会生成一份R文件,为每一个资源都分配了一个id,我们可以根据这个id进行访问。那如何获取到这个id呢,主要是根据我们在资源xml文件中定义的id,比如R.id.btn_login,类似于html中我们用到的id,也可以是类型+资源名来获取到这个id,比如R.string.hello_world。
布局的树形结构
一个用户界面整体是一个树形结构,有一个根的layout,之后layout可以相互嵌套。在android中资源分为两类:viewGroup和view,而viewGroup继承与view,viewGroup主要指布局,而view主要指控件,如按钮,文本,列表框等 Layout 讲到布局,必须提到布局的几种类型,最常用的是线性布局,其次是相对布局,之后是绝对布局和帧布局,线性布局分为垂直和水平,默认是水平的方式。相对布局主要是相对屏幕或者某个控件,某个内嵌布局的相对位置。Manifest的相关作用
Manifest主要是用来声明App的运行环境,比如运行设备的硬软件特征,对屏幕分辨率,内存空间大小的要求,对Android操作系统版本的要求,App包含哪些组件,需要哪些用户权限等。这些都需要在Manifest中进行相关的声明
先做加法讲清楚,之后做减法,言简意赅,严格控制时间
讲清楚,do better
小小测试---初步理解认识UI和交互
最后是做些小小测试,检验下大家今天的收获成果,比如在Android开发最重要的就是UI和交互,通过之前的几个小实验,现在大家思考下,这些稍微复杂一点的界面UI如何实现呢?如何构造布局,选择何种控件?
可以看到左边的这个,有一个标题栏,下面是聊天界面,最下面是输入框和发送按钮,可以做一个垂直线性的布局。上面的标题栏可以做一个横向线性的布局,中间的是一个listview的列表框,下面也可以做一个横向的线性布局(手绘一下基本的一个构造)
中间是一个通讯录的页面,这个通讯录的好友页面较之我们之前要复杂的多 也可以做一个垂直的线性布局,上面是一个标题栏,下面是一个listview,标题栏做一个横向的线性布局。而listview对其每一个list又定义一个横向的线性布局,一个ImageView图像控件和一个文本控件 右边的就相对要简单。标题栏加一个图像对象
看完UI之后,我们来分析下交互,左边的是输入文本框的内容,在点击按钮的时候获取文本框的内容添加到消息对象中,listview的消息列表中添加这条发送的消息。
中间就是我们刚刚获取了通讯录的用户名和电话号码的基础上之后,我们还需要获取联系人的头像。将这些元素在自定义列表布局中进行显示。
右边是添加一个感知器对象,感知手机晃动加速度,当加速度达到一定程度,随机弹出一个餐厅的名字。
先做加法讲清楚,之后做减法,言简意赅,严格控制时间
讲清楚,do better 这三个界面可以做三个活动,在活动中显示UI,并且在活动中完成按钮以及列表框的触发事件。最后通过intent在各个界面之间进行跳转。
最后我们分析下微博的构造来理解四大组件。
微博有哪些主要的功能模块,这些功能模块之间如何交互。
从最下面的导航栏可以看出主要有微博主页,消息箱,微博发布器,发现和我的profile五大功能模块。他们之间可以通过点击按钮实现跳转到相应的活动页面,如果再进入更加深入一级别,就通过点击返回键,返回到上一界面。
首先所有的活动都会接收系统状态参数的一些广播,比如电量,比如网络状态,而且所有的活动都会接收push SDK的push通知服务等,所有活动也会接收当密码变更强制下线的广播。比如通讯录访问手机联系人的时候会用到通讯录数据。我们主要分析下微博feed流和消息箱,这些一般都是分为几个模块,feed流和消息箱都是相应的listview,并且对list定制布局。
后记
本次分享旨在让大家对android开发有一个初步的认识,了解android开发的重要组成部分和基本开发流程,当接到android开发的需求的时候,有一个开发的方向感和清晰的开发思路。希望大家能动一动手,一起见证奇迹app诞生时刻。
先做加法讲清楚,之后做减法,言简意赅,严格控制时间
讲清楚,do better
进入电子市场后会看到应用程序和游戏的选项,另外右上角还有一个搜索按钮,点击应用程序选项后可以看到所有程序的分类,点击分类或者所有应用程序后可以选择按照上传时间或者受欢迎程度查看这些程序。当然进入电子市场后你随时可以使用搜索选项查找特定的应用程序。
找到感兴趣的应用程序后,点击进入可以查看该程序的简单介绍(有些应用程序还提供程序截图)和用户评分等信息,方便你对这款程序进行评估。
如果确定安装某款程序,点击屏幕底部的安装按钮就可以开始安装,电子市场会先下载这款程序,下载速度和手机网络相关,为了节省流量费用,可以尽量选择在 WiFi网络环境下载程序。程序下载完成后会开始自动安装。程序安装开始后会跳出一个屏幕告诉你程序需要访问的系统资源,只要点击同意就可以完成安装,
卸载Android应用程序
当你在自己的Android手机安装完一些应用程序后,难免有一些程序不对你的胃口,或者有这样或那样的问题,抑或是程序安装太多导致手机内存不足都需要卸载部分应用程序。Android手机应用程序的卸载比安装还要简单。
按手机的MENU键进入Android系统菜单
选择设置菜单,进入后再选择应用程序菜单
点击管理应用程序,接下来就可以看到你的Android手机安装的所有应用程序
选择想要卸载的应用程序,点击卸载选项,然后确定就可以完成卸载操作
通过Android电子市场安装的应用程序还可以通过电子市场卸载,进入电子市场后选择下载内容选项,可以看到所有通过电子市场安装的应用程序;
阅尽天下报纸
PressReader阅读器
如果你喜欢阅读国外的报刊、杂志来获取资讯或者学习英语,那么这款名为“PressReader”的手机应用就适合你。与传统的RSS订阅阅读器不同,它的定位很准确,就是一款纯粹的报刊阅读器,并且支持的种类够多。
PressReader主要的功能选项只有三个:“已下载”、“购买商店”以及“设置”,在“购买商店”中只需点击任意一家媒体的名字即可下载PDF文本的报刊,完成后,系统会自动排版,用户可以在“原版”与适合手机阅读的“精简版”之间相互切换浏览,而且软件还支持离线文本阅读的功能。
易读
网易阅读
对互联网资讯感兴趣的朋友,总是喜欢随时随地的查看并订阅互联网上的第一手资讯,在移动互联网的时代,聚合互联网资讯的阅读应用总是很多,网易阅读就是其中一款。这款依托于网易门户网站的手机应用,可以把你手中的Android手机变成一本可以观看各种资讯,定制个性化图片、报纸、杂志、博客的电子杂志。
当然了,用户还可以根据自己喜好,对应用收看的内容进行定制,比如:文章收藏、字体大小调整、离线浏览以及通过账号同步保存订阅记录,这样一来网易阅读就是一本属于当前用户的独一无二的个性杂志。
看天下
凤凰新闻
喜欢时政要闻的用户总是喜欢在手机中安装新闻资讯的手机应用以便随时观看,依托于凤凰卫视以及凤凰网两大新闻资讯的凤凰新闻手机客户端想必属于这类用户必装的手机应用吧,它能在第一时间将把凤凰资讯送到你的手中。
本文描述了基于Android手机平台的音乐播放器开发, 为Android使用者提供更多的选择, 尽量能够满足用户个性化的要求, 使用户的手机更加显得生动灵活, 达到让用户真正的随时随地处于音乐的旋律中。
1 Android结构组成
Android操作系统主要有4部分组成:[3]:Activity (活动) 、Service (服务) 、Broadcast Intent Receiver (广播) 、Content Provider (数据提供者) 。虽然系统由以上部分组, 但这并不意味着每一个Android应用程序都需要这四个模块, 是否需要以上各部分主要由软件业务来决定。在某些时候, 只需要这四种中的几个组合成相关的应用。各个组件模块之间要进行切换必须通过一个意图Intent类来实现, Start Intent () 方法主要用来在各组件之间进行跳转。Android布局如同是一个承载组件的容器, 组件不同放置方式决定了应用界面是否友好, 便于操作。因此, Android布局是系统开发中的一个重要环节, 在Android软件开发过程中, 主要有五种布局方式, 它们分别为:Frame Layout (框架布局) , Linear Layout (线性布局) , Absolute Layout (绝对布局) , Relative Layout (相对布局) , Table Layout (表格布局) 。以上布局方式可以相互嵌套, 以便组成各种不同的应界面。线程也是Android系统的一个重组成部门, Android级线程之间通信主要通过中介类Handler来实现。SQLite数据库是Android自带的一个小型的数据库, 由于它占用资源非常低, 所需内存非常小, 一般仅需要几百K的内存就够用, 适合在Android移动平台或嵌入式设备中使用。
在集成开发工具Eclipse上集成了插件ADT, 以便用于Android系统的软件开发。当一个Android程序启动时, Eclipse会启动一个模拟器, 模拟器用于模拟当前手机硬件基本功能和相关的基本操作。
1.1 基于Android开发的软件目录结构
Android工程目录基本结构[4]主要包括:src (程序源代码) 、gen目录、assets (系统所用到的如mp3、视频类等文件) 、Res (资源文件) :主要存放程序界面的布局配置 (.xml) 文件和图片资源。Android Mainfest.xml是四大组建的驱动配置文件, 有它的存在, Android程序的四大组件才可以正常的跳转。在gen目录中有个R.java文件, 通过它可以快速定位需要的资源, 同时编译器检查R.java列表中的资源是否被使用到, 如果没有被用到, 该资源将不被编译到软件中, 以便减少应用程序占用的空间。
1.2 Android Mainfest.xml文件
Android Mainfest.xml项目中的总配置文件, 用于记录程序中所使用的各种组件。每个Android应用系统都要使用Android Mainfest.xml来引导启动, Android Mainfest.xml文件由新建的工程项目都会自动生成, 它也是整个应用系统能够正常运行的核心, 其中包含了Android SDK的版本。
2 系统具体实现
2.1 系统功能图
本系统的主要功能有播放音乐、搜索音乐、解析歌词、接受广播。其中播放音乐主要包括的子功能有上一首、下一首、暂停功能、播放功能, 搜索音乐则包括搜索媒体歌曲和媒体歌词, 解析歌词则就是解析LRC歌词, 接受广播则是进行播放服务和接收音乐服务。系统的整体结构图如图1所示。
2.2 音乐播放器E-R图
音乐播放器的内容主要组成是播放列表、歌曲数目。而播放列表的属性是歌曲的名字和编号, 由歌曲组成, 歌曲的属性则包括曲目号码、大小、艺术家、专辑、歌曲名字、发行库、流派等, 如图2所示:
2.3 数据库连接
Android自带SQLite数据库, 是用C语言编写的开源嵌入式数据库, 支持SQL92标准, 同时可运行在所有主流操作系统上运行。SQLite运行资源占用少、性能良好并且管理几乎零成本, 因引在嵌入式数据库开发方面应用非常广泛。如Android、i Phone都内置了SQLite数据库。当编写相关数据库引代码后, Android会在/data/data/[PACKAGE_NAME]/databases目录下生成一个“music.db”的数据库文件。在本文中, 定义Music DBHelper extends SQLite Open Helper类实现数据的基本操作。当需要打开一个数据库连接并获得数据库对象时, 首先根据Music DBHelper创建一个辅助对象, 然后调用该对象的get Writable Database或get Readable Database方法获得SQLite Database对象。
3 播放器系统功能详细设计及编码
3.1 音乐播放器主界面功能实现
3.1.1 播放器主界面
在Android应用系统中, 用户界面框架 (Android UI Framework) 使用了MVC (Model-View-Controller) 模型, 即处理用户输入的控制器 (Controller) 、显示用户界面及应用程序的视图 (View) , 和保存数据的模型 (Model) 。用户界面通过布局配置文件进行布局, 该文件包括各种布局方式和各种资源文件, 如图像、文字、颜色等。程序通过代码对各种配置数据进行操作, 以便形成不同的可视化用户界面和绚丽的视觉效果。播放器主界面由一个Activity组成[5], 每当Android应用程序启动时, activity首先执行On Create () 方法, 通过该方法执行用户界面的初始化操作。Activity有个专门用于布局的方法:Context.set Content View (String musiclayout Res ID) , 参数为要加载的资源ID, 该资源存放在工程目录res/layout下, 在本文中, 用户主界面布局文件被命名为music_rack, 下面为musicrack.xml布局文件代码结构如下:
在本文中, 通过绝对布局
3.1.2 播放界面音轨的实现
在Android系统中, 自带有播放音轨的组件, 但该组件不能从外观界面和从功能上考满足用户的实际需求, 为了实现用户的使用要求, 因此本文自定义一个Lookfor音轨进度条, 其实现的代码如下:
上面的参数中android:thumb="@drawable/media_player_progress_button"为加载音轨进度条的图片资源。android:progress Drawable="@drawable/seekbar_img"为进度条引用的风格。android:layout_width="fill_parent"指定进度条的宽度为充满整个屏幕, 而android:layout_height="wrap_content"指定进度条的高度为适中, 根据显示所需的大小进行变化。
3.1.3 播放器播放、暂停、停止等功能实现
在Android操作系统中, 已经封装了一个命名为Media Player的音乐播放接口[6], 该接口在执行时需要一个数据源。在本文中播放的功能主要分两部分实现:首先执行开始按钮的监听操作和通过intent调用歌曲信息;再调用play () 方法进行播放。同时可在Music Player中发出音乐调用pause () 暂停或调用stop () 停止的事件
在Music Player Service中接受Intent中信息, 根据信息的内容通过定义on Start (Intent intent, int start Id) 实现开始播放、暂停、停止等操作。
在监听器中创建一个Intent对象, 当操作发生后由Music Player跳转到Music Player Service, 然后读取歌曲文件的相关信息并压入Intent中, 再传递到service中。当执行播放操作时, 首先获取要播放的歌曲信息如:路径和歌曲名等信息, 然后调用mediaplayer接口读取数据, 并开始播放。当执行播放、暂停、停止等功能时, 则只需根据相关指令进行操作即可, 不需要再进行数据的读取。
3.2 播放列表的实现
播放器的播放列表主要包括歌曲名字、演唱者、歌曲时间, 播放列表配置文件框架结构主要如下所示:
在以上配置文件中, Text View用于定义每一个文本框, 显示歌曲的名字和演唱者以及时间。而播放列表的功能通过调用自定义方法get Music View (int pos, View con View, View Group view Parent) 来实现。该方法收到从存储卡中读取歌曲返回的信息后, 以列表的形式显示出来, 当用户打开列表时会自动搜索本地的歌曲文件, 并显示在列表中, 当本地没有歌曲文件时, 则提示列表为空。
3.3 菜单功能
在菜单功能中, 该文只设置了退出选项, 旨在减少程序代码的冗余, 程序中的Music Menu.java设置一个List
3.4 手机扩展卡的访问
为了更好的管理音乐文件, 该文专门开发了了文件浏览功能。当打开音乐文件浏览器时, 可以显示文件的目录结构、歌曲文件的文件名和文件图标等信息。对于每可查看得到的文件, 都可对其进行文件管理操作。因为本文的文件浏览功能是专为播放器操作歌曲而设计的, 因此通过该文件浏览器只能查看和操作音乐文件。在主菜单界面上, 选择新增选项进入到文件浏览器, 或者当播放列表为空时, 会提示用户进入文件浏览器新增歌曲。代码实现如下所示:
利用Android多媒体自带的存储方法进行数据的存储[7], 这样可以较好的利用系统资源, 其中Media Store.Audio.Media.TITLE代表的查找歌曲标题, Media Store.Audio.Media.DURATION代表查找歌曲的时间, Media Store.Audio.Media.ARTIST代表查找歌曲作者, Media Store.Audio.Media.ALBUM, 代表查找歌曲所属的专辑。
3.5 仿真结果和性能测试
如下图3所示, 即为播放器的主界面, 主要由歌曲名字, 歌手头像、歌词、进度条和各种播放功能组成:
3.5.1 播放界面音轨的实现
由于系统的Seekbar[8]通常很难满足用户的功能和感观需求, 因此本文定义了一个音轨进度条。如图4所示。该进度直观明了, 也便于用户操作使用。
4 结论
基于Android平台的手机音乐播放器, 希望能够为用户提供一款节约手机资源, 实用性强的手机音乐播放器。在本款软件中, 减少了很多不必要的功能设置, 避免了界面花哨、功能庞大而带来的浪费资源的问题, 所以较大的提供了软件的实用性, 希望能够得到较为广泛的应用。在本次软件的开发过程中, 从最初的Android开发环境搭建开始学习, 因为ADT的插件要在Eclipse中连线到国外在线安装升级, 所以这一部分相对消耗的时间较长, 但是过程也比较简单。然后就是对Android基本框架的学习, 以及熟悉Android的层次结构, 并要掌握常用的配置属性。
参考文献
[1]独立网页.Android.http://baike.baidu.com/view/1241829.htm.百度百科.2013
[2]Bruce Eckel.Thinking In Java[M].英文第4版.机械工业出版社, 2007.
[3]高焕堂.Android应用框架原理与程式设计36技[M/OL].Google公司.
[4]马越.Android的架构与应用[D].中国地质大学 (北京) 硕士学位论文.
[5]陈利强.基于ARM芯片的嵌入式图像处理平台开发与实现[D].华南理工大学硕士论文, 2011.
[6]Haseman Chris.Android Essentials[M].Apress:the Expert’s Voice, 2008:156-160.
[7]DiMarzia Jerome.Android:A Programmer’s Guide[M].McGraw-Hill, 2008:85-120.
期望职位:软件工程师
最高学历:本科
期望月薪:3000-5000元
工作年限:
期望地区:重庆 - 不限
籍 贯:四川 - 南充
查看联系方式
教育经历
9月 至 7月|重庆大学|本科|电子工程
自我描述
本人对软件开发有浓厚兴趣,具有良好的编码习惯、文档撰写能力和英文阅读能力。学习勤奋刻苦、脚踏实地;敢于尝试,沟通能力、学习能力良好,具备团队合作精神。善于发现并解决问题,逻辑思维较强;并且能够承受压力、能够服从公司安排。
语言技能
普通话:很好
英语:一般
专业技能
Linux :熟练|经验:2年
Android :熟练|经验:3年
Socket编程 :熟练|经验:3年
多线程编程 :熟练|经验:3年
SQLServer :熟练|经验:3年
项目/培训经验
201月-年2月|IT博客园
项目/培训机构:IT博客园
1我来给讲解一下,画布的问题;首先onDraw提供一个默认的canvas;我们可以想象一下,这块画布就是手机屏幕,我们可以使用这块画布画背景色;
2我们的球形加速球,是通过两层图重叠取得重叠的部分
示意图如下
我们先画出了矩形,代码如下
path.reset; path.moveTo(600, courentProgress); path.lineTo(600, 600); path.lineTo(count, 600); path.lineTo(count, courentProgress);
然后画出了圆形,设置画笔,使得只显示两部分重叠的部分:
此处可参考上一篇:blog.csdn.net/taoolee/article/details/48527917
PorterDuffXfermode mode = new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP); paintRect.setXfermode(mode);
这样显示的效果就是
【3】实现点击加速球,加速效果
先要添加点击事件vcD4NCjxwcmUgY2xhc3M9”brush:java;“>private float x; private float y; @Override public boolean onTouchEvent(MotionEvent event) { x = event.getX(); y = event.getY(); switch (event.getAction()) {case MotionEvent.ACTION_DOWN: if (x>250&&x<550&&y>250&&y<550) { handler.sendEmptyMessage(0x11); return true; } } return super.onTouchEvent(event); }
然后使用handler处理改变当前水面高度,
我们先默认初始高度75%
【android手机游戏开发】推荐阅读:
android开发案例教程11-24
android蓝牙开发简介12-22
android开发学习教程02-14
android开发工程师工作岗位职责说明07-09
android实习日记07-15
android商品管理07-19
Android 个人总结07-19
android实习总结11-07
android面试宝典02-08
android实验报告03-03