Android移动终端开发大作业.docx
- 文档编号:29403994
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:57
- 大小:248.86KB
Android移动终端开发大作业.docx
《Android移动终端开发大作业.docx》由会员分享,可在线阅读,更多相关《Android移动终端开发大作业.docx(57页珍藏版)》请在冰豆网上搜索。
Android移动终端开发大作业
Android移动终端开发大作业
一、作业要求
●1人一组,独立完成。
●按照个人兴趣方向,自选题目,完成系统。
●在规定的时间里完成系统主体功能,程序比较稳定的运行。
●手机界面要求简洁、美观,功能不能过于简单,应具备一定的实用性。
●至少要3个Activity以上。
●必须使用自定义Listview,要使用Sqlite数据库或API调用与数据解析(API可使用聚合数据(Store(apistore.baidu./)或apix(
●欢迎好的创意作品、实用作品,评分时会适当加分。
●需提交设计报告,设计报告格式见附件,按附件顺序装订(包括评分表)
●大作业成绩从工作量、功能点、创新性、实用性、报告的字数、质量及规度等方面的成绩构成
二、注意事项
●压缩包作业容包括两部分:
1 作业项目文件夹,项目必须能够调试通过,android平台选择选择2.2或是2.3.3。
2 作业设计说明,word文件。
●可以借鉴网络上的代码,但不可全部照搬。
不许相互抄袭,一旦发现成绩为零。
附件1:
学号
17
成绩
Android平台移动应用开发
大作业
题目
基于Android的新闻浏览软件的设计与实现
学院
信息工程学院
专业
信息工程
班级
信息1303
姓名
杏允升
指导教师
珀石
2015
年
12
月
10
日
一、
概述
Android应用平台新闻客户端软件是基于Android手机平台,采用Java语言,从网络上的开放的新闻接口获取数据,设计出针对使用Android平台的手机新闻客户端资讯实时掌控的手机应用程序。
Android平台新闻客户端软件的开发可以进一步扩大时事新闻的覆盖面,让广大公众能够随时随地方便且快捷地获取最新的新闻资讯信息,了解新闻时事,本软件的广泛使用,尤其是在传授知识、普及教育方面起着非常重要的作用。
目前市场研究机构Worldpanel发布了全球主要的国家智能手机操作系统在去年Q4的分布报告,报告指出了谷歌的Android继续保持着增长的势态,但是增幅已经明显放缓了。
而在另一个方面,苹果iOS操作系统在全球只能手机市场上均有下滑,个别国家的降幅甚至高达10.3%。
最新统计数据中显示,Android操作系统将继续领跑全球市场,包括美国、澳大利亚、中国、意大利、英国、德国、西班牙等所占的市场比例都已经超出50%,并且还将继续呈现上涨的趋势。
而在苹果iOS操作系统方面,最大的市场份额所占比的国家依旧是美国,数值为43.9%;紧随美国的则是澳大利亚,数值为35.2%;而在中国方面,市场份额也从21.2%下降到了19%;在意大利,iOS所占的市场份额更是从23.1%猛降至12.8%。
从上面的数据可以看出,Android手机软件的开发具有巨大的发展前景,在Android系统上开发出一款手机新闻客户端软件所支持的用户量也是相比较于其他系统多出很多的。
谷歌的移动平台主管安迪·鲁宾(Andy Rubin)表示,跟软件开发合作对象的密切接触正在进行中。
Google与开放手机联盟联合开发了 Android操作系统,这个联盟由摩托罗拉、高通、宏达电、中国移动和 T-Mobile 等在的多家无线应用和技术的领军企业组成。
Google通过与设备制造商、开发商、运营商和其他有关各方结成深层次的合作关系,希望借助建立开放式、标准化的移动移动软件平台,在移动产业形成一个开放性的生态系统,这将是开发Android软件的一个契机,Android平台的开发在将来必定大放异彩。
二、
关键技术
1)使用ViewPager里面添加多图片配合线程延时实现轮播图的自
没有通过ScheduledExecutorService或Timer定期执行某个任务实现,而是简单的通过handler发送消息去完成一次滚动,在完成一次滚动后发送另外一个delay的滚动消息,如此循环实现。
自动滚动部分核心代码如下:
至于ViewPager嵌套引起子ViewPager无法触摸问题是通过在子ViewPager的onTouchEvent中添加
禁止父控件对touchevent做intercept解决的。
ViewPager滑动速度的设置是通过反射的方式重新设置ViewPager的Scroller,改变Scroller的startScroll的间隔时间完成的。
调用setScrollDurationFactor(double)即可。
2、使用
(1)引入公共库
引入AndroidAutoScrollViewPagerGithub作为你项目的library(如何拉取代码及添加公共库)。
(2)调用
仅需简单两步:
a.布局定义
代替一般的ViewPager定义
b.启动ViewPager自动滚动
startAutoScroll()启动自动滚动
stopAutoScroll()停止自动滚动
3、设置
setInterval(long)设置自动滚动的间隔时间,单位为毫秒
setDirection(int)设置自动滚动的方向,默认向右
setCycle(boolean)是否自动循环轮播,默认为true
setScrollDurationFactor(double)设置ViewPager滑动动画间隔时间的倍率,达到减慢动画或改变动画速度的效果
setStopScrollWhenTouch(boolean)当手指碰到ViewPager时是否停止自动滚动,默认为true
setSlideBorderMode(int)滑动到第一个或最后一个Item的处理方式,支持没有任何操作、轮播以及传递到父View三种模式
setBorderAnimation(boolean)设置循环滚动时滑动到从边缘滚动到下一个是否需要动画,默认为true
4、其他
(1)指示器,圆形或是方形指示器请配合ViewPagerIndicator使用
(2)无限循环,如果希望在最后一继续播放第一而不是退回到第一,请参考AutoScrollViewPagerSingleDemo.java,注意这个特性不能和ViewPagerIndicator使用
2)使用viewpager结合ViewPageIndicator进行新闻类别的分类切换,可点击切换也可以滑动切换。
1.ViewPagerIndicator的Library
查看ViewpagerIndicator的Library代码,可以看到此项目的设计思想:
首先定义了一个PageIndicator接口,它里面定义了最重要和基本的indicator表现出的一些方法:
1.1首先一个indicator必须要与一个ViewPager关联在一起,所以它提供了一个setViewPager方法。
1.2它扩展了ViewPager.OnPageChangeListener接口,表示接管了ViewPager的Pager改变时的监听处理,
这也是为什么为ViewPager设置OnPageChangeListener监听器时不能设置在ViewPager上而必须设置在
indicator上的原因。
1.3还有一个notifyDataSetChanged通知方法,表示为这个ViewPager提供View(一般是Fragment)的 Adapter里面的数据集发生变化时,执行的动作,这里可增加相关的逻辑。
2.ViewpagerIndicator的实现类
然后再看下ViewpagerIndicator的实现类,共有6个,由6个类分别实现,它们分别为:
2.1小圆圈类型的
2.2带图标类型的
2.3小横线类型的,距离屏幕最下边端有一定的距离。
2.4标签类型的(Tab)
2.5标题类型的,与标签类型的有点像,但它当前的标题页的左/右边的标题会卷起,即往两端缩进去。
2.6屏幕底部小横线类型的,并且会占满整行。
3.ViewpagerIndicator随附带的Demo
Demo项目的设计
项目由一个ListSamples的ListActivity入口,它主要用作组装所有的子indicator的列表。
TestFragment.java,所有ViewPager上真正显示的视图。
TestFragmentAdapter.java,所有ViewPager里的Adapter,为ViewPager生成TestFragment。
Samplexxx.java,所有的indicator的显示,一个类显示一种使用方法或特性
2)使用viewpager结合ViewPageIndicator进行新闻类别的分类切换,可点击切换也可以滑动切换。
3)使用Gson对新闻数据的json字符串进行解析显示到listview上
需要使用jar包
fastjson或gson这两个jar包。
//Gson的使用方式Gsongson=newGson();Stringstr=ReadAssetsFile.readtext(this,"json_ss");//this当前类,"json_ss"需要解析的文件名UserMessageuserMessage=gson.fromJson(str,UserMessage.class);//需要解析的json文件最外层类名//fastjson的使用方法Stringjson=ReadAssetsFile.readtxt(this,"json_h");UserMessageuser=JSON.parseObject(json,UserMessage.class);
自己扩展
4)使用Universal-Image-Loader对图片进行缓存加载
Android上最让人头疼的莫过于从网络获取图片、显示、回收,任何一个环节有问题都可能直接OOM,这个项目或许能帮到你。
UniversalImageLoaderforAndroid的目的是为了实现异步的网络图片加载、缓存及显示,支持多线程异步加载。
它最初来源于FedorVlasov的项目,且自此之后,经过大规模的重构和改进。
特性列举:
多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
支持随意的配置ImageLoader,例如线程池,图片下载器,存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
支持图片的存缓存,文件系统缓存或者SD卡缓存
支持图片下载过程的监听
根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的存
较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
提供在较慢的网络下对图片进行加载
使用过程:
创建默认的ImageLoader,所有的操作都由ImageLoader控制。
该类使用单例设计模式,所以如果要获取该类的实力,需要调用getInstance()方法。
在使用ImageLoader显示图片之前,你首先要初始化它的配置,调用ImageLoaderConfiguration的init()方法,然后你就可以实现各种的显示了。
自定义配置imageloader,就像你已经知道的,首先,你需要使用ImageLoaderConfiguration对象来初始化ImageLoader。
由于ImageLoader是单例,所以在程序开始的时候只需要初始化一次就好了。
建议你在Activity的onCreate()方法中初始化。
如果一个ImageLoader已经初始化过,再次初始化不会有任何效果。
下面我们通过ImageLoaderConfiguration.Builder创建一个设置
得到imageLoader
使用过程:
(1)图像操作是否参与缓存以及图像效果的配置操作
DisplayImageOptions以下是所有默认配置参数根据需求可以自定义配置
(2)图片加载监听器在这里吧可以设置加载时的动画或者进度条之类的东西这里
(3)简单设置就可以给ImageView添加图片了
对于本地的图片,在其绝对地址前面要加入"file:
//"。
网络图片就直接写路径了。
缓存的清理:
缓存的清理可以按需求来定,可以再每个Activity的生命周期函数onDestroy中清理也可以单独设置让用户自行清理。
GirdView,ListView加载图片:
相信大部分人都是使用GridView,ListView来显示大量的图片,而当我们快速滑动GridView,ListView,我们希望能停止图片的加载,而在GridView,ListView停止滑动的时候加载当前界面的图片,这个框架当然也提供这个功能,使用起来也很简单,它提供了PauseOnScrollListener这个类来控制ListView,GridView滑动过程中停止去加载图片,该类使用的是代理模式
第一个参数就是我们的图片加载对象ImageLoader,第二个是控制是否在滑动过程中暂停加载图片,如果需要暂停传true就行了,第三个参数控制猛的滑动界面的时候图片是否加载
概要设计
Json数据的一些返回参数
名称类型说明
error_codeint返回码
reasonstring返回说明
resultstring返回结果集
titlestring新闻标题
contentstring新闻摘要容
img_widthstring图片宽度
full_titlestring完整标题
pdatestring发布时间
srcstring新闻来源
img_lengthstring图片高度
imgstring图片
urlstring新闻
pdate_srcstring发布完整时间
三、系统实现
代码1:
package.name.xinwen;
import.thinkland.sdk.android.JuheSDKInitializer;
importandroid.app.Application;
importandroid.content.Context;
importandroid.os.Handler;
importandroid.os.Looper;
/**
*应用程序的入口
*/
publicclassBaseApplicationextendsApplication{
privatestaticContextmContext;
privatestaticThreadmMainThread;
privatestaticintmMainThreadId;
privatestaticHandlermMainThreadHandler;
privatestaticLoopermMainThreadLooper;
Override
publicvoidonCreate(){
super.onCreate();
JuheSDKInitializer.initialize(getApplicationContext());
//在应用程序入口提供全局的工具
//上下文
mContext=this;
//主线程和子线程
mMainThread=Thread.currentThread();
//mMainThreadId=mMainThread.getId();
//当前应用程序进程ID
//mMainThreadId=android.os.Process.myPid();
//线程idmyTid();
mMainThreadId=android.os.Process.myTid();
//用户idmyUid();
//主线程handler
mMainThreadHandler=newHandler();
mMainThreadLooper=getMainLooper();
}
publicstaticContextgetContext(){
returnmContext;
}
publicstaticThreadgetMainThread(){
returnmMainThread;
}
publicstaticintgetMainThreadId(){
returnmMainThreadId;
}
publicstaticHandlergetMainThreadHandler(){
returnmMainThreadHandler;
}
publicstaticLoopergetMainThreadLooper(){
returnmMainThreadLooper;
}
}
package.name.xinwen;
import.thinkland.sdk.android.JuheSDKInitializer;
importandroid.app.Application;
importandroid.content.Context;
importandroid.os.Handler;
importandroid.os.Looper;
/**
*应用程序的入口
*/
publicclassBaseApplicationextendsApplication{
privatestaticContextmContext;
privatestaticThreadmMainThread;
privatestaticintmMainThreadId;
privatestaticHandlermMainThreadHandler;
privatestaticLoopermMainThreadLooper;
Override
publicvoidonCreate(){
super.onCreate();
JuheSDKInitializer.initialize(getApplicationContext());
//在应用程序入口提供全局的工具
//上下文
mContext=this;
//主线程和子线程
mMainThread=Thread.currentThread();
//mMainThreadId=mMainThread.getId();
//当前应用程序进程ID
//mMainThreadId=android.os.Process.myPid();
//线程idmyTid();
mMainThreadId=android.os.Process.myTid();
//用户idmyUid();
//主线程handler
mMainThreadHandler=newHandler();
mMainThreadLooper=getMainLooper();
}
publicstaticContextgetContext(){
returnmContext;
}
publicstaticThreadgetMainThread(){
returnmMainThread;
}
publicstaticintgetMainThreadId(){
returnmMainThreadId;
}
publicstaticHandlergetMainThreadHandler(){
returnmMainThreadHandler;
}
publicstaticLoopergetMainThreadLooper(){
returnmMainThreadLooper;
}
}
代码2:
/*
*Copyright(C)2013AndreasStuetz
*
*LicensedundertheApacheLicense,Version2.0(the"License");
*youmaynotusethisfileexceptincompliancewiththeLicense.
*YoumayobtainacopyoftheLicenseat
*
*.apache.org/licenses/LICENSE-2.0
*
*Unlessrequiredbyapplicablelaworagreedtoinwriting,software
*distributedundertheLicenseisdistributedonan"ASIS"BASIS,
*WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
*SeetheLicenseforthespecificlanguagegoverningpermissionsand
*limitationsundertheLicense.
*/
packageorg.xinwen.indicator.lib;
importandroid.annotation.SuppressLint;
importandroid.content.Context;
importandroid.content.res.TypedArray;
importandroid.graphics.Canvas;
importandroid.graphics.Paint;
importandroid.graphics.Paint.Style;
importandroid.graphics.Typeface;
importandroid.os.Build;
importandroid.os.P
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 移动 终端 开发 作业