安卓开发课程设计报告

安卓开发课程设计报告

2023年7月15日发(作者:)

安卓开发课程设计报告湖南科技⼤学计算机科学与⼯程学院综合实践能⼒创新实训-安卓开发课程设计报告题 ⽬: 新 闻 客 户 端学 号: 17050103XX姓 名: ⽩马完成时间: 2019年12⽉15⽇安卓开发-新闻客户端1.设计要求1.1 技术平台要求1.熟悉 Android Stuido、Eclipse、SQLite 等常⽤ Android 开发⼯具。2.熟悉⼀种语⾔,主要使⽤java语⾔开发。3.设计并实现⼀个具体的 Android 应⽤系统,本次课程设计选择的是新闻客户端的题⽬。(1)对选定的新闻客户端项⽬进⾏需求分析,写出需求说明书,并搜集、整理所需素材。(2)根据项⽬需求,进⾏数据库(如果需要数据库的话)的概要设计与详细设计。(3)根据需求说明进⾏项⽬的功能设计,画出每个界⾯的原型。进⾏详细设计,实现每个模块的功能。(4)对项⽬进⾏部署与测试。(5)分析总结项⽬的创新点和存在的不⾜,提出优化思路。1.2 功能要求对于要完成的新闻客户端项⽬需要做到以下功能:1.掌握 Android 中的菜单及导航框架。随着安卓开发的盛⾏,安卓应⽤占据了⼿机APP市场的绝⼤部分份额。随着市场的推动和技术的发展与沉淀,Android开发领域产⽣了很多实⽤并且容易开发的各类包和⼩型框架,例如速展⽰Adobe Afeter Effect(AE)⼯具所作动画的框架客户端组件间异步通信的框架lottie-android、RxAndroid、侧滑菜单栏框架SlidingMenu、提供场景转换过渡能⼒的动画框架Material-Animations等众多矿建,使得Android开发的样式更加的多样化、⽤户体验更加的⾼,开发周期更加短。2.掌握⾃定义布局.掌握安卓的五⼤布局,对于五⼤布局的使⽤场景进⾏了解,并且能够在⾃⼰的项⽬⾥⾯合理选择和使⽤安卓的界⾯布局。3.掌握 Android 中的数据存储对于Android的五⼤数据存储⽅式进⾏熟悉与使⽤。在本次的新闻客户端的课程设计的开发中,Android的数据存储使⽤到了SharedPreferences数据存储和⽹络断的数据获取的⽅法。4.掌握安卓项⽬的运⾏⽅式和⽹络端数据的获取、处理和展⽰, 能够将从⽹络中夺取的数据进⾏处理利⽤listView显⽰在APP中,能够对于内容进⾏查看。1.3 其他要求在课程设计的过程中要求以个⼈为⼩组完成实验项⽬的开发,要求从界⾯的设计到逻辑java代码的实现,图标的排版,运⾏、测试和实验报告的撰写都由个⼈完成。2.背景介绍随着移动通信与Internet向移动终端的普及,⽹络和⽤户对移动终端的要求越来越⾼,⽽wWindows Mobile, PalmoS等⼿机平台过于封闭,不能很好的满⾜⽤户的需求,因此市场迫切需要⼀个开发性很强的平台。经过多年的发展,第四代代数字通信(4G) 技术活动了⼴泛的接受,它为移动终端⽤户带来了更快的数据传输速率。随着4G⽹络的使⽤,移动终端不再仅是通讯⽹络的终端,还将成为互联⽹的终端。因此,移动终端的应⽤软件和需要的服务将会有很⼤的发展空间。Google 为此于2007年11⽉推出了⼀个专为移动设备设计的软件平台⼀-Android。不仅如此,在科技的巅峰时期,第五代数字通信(5G的出现)将会把Android开推上⼀个更⾼的台阶,等多的、更多元化的、更快速的安卓应⽤将诞⽣。Android是⼀套真正意义上的开发性的移动设备综合平台,它包括操作系统、中间件和⼀些关键的平台应⽤。Android是由Linux+Java 构成的开源软件,允许所有⼚商和个⼈在其基础_上进⾏开发。Android平台的开放性等特点既能促进技术(包括平台本⾝)的创新,⼜有助于降低开发成本,还可以是运营商能⾮常⽅便地制定⾃⼰的特⾊化的产品。因此,它具有很⼤的市场发展潜⼒。3.需求分析在互联⽹和IT技术快速发展的这个社会,伴随着Android操作系统的盛⾏,基于Android发的的基于Android的应⽤已经⾮常盛⾏。⽽且安卓开发更将⾯向普通永华,这些⽤户更关注⽤户体验因此利⽤安卓实现多媒体应⽤⼗分必要。在以前的传统认知中⼈们获取新闻的⽅法⼀般来源于收听⼴播、阅览报纸、观看电视新闻、但是对于4G发展、5G马上盛⾏的新世纪,简单的信息获取已经完全不能能满⾜当代⼈的需求,⼀款可以直接在⼿机APP上阅览新闻的APP也就显得尤为重要。利⽤APP查看新闻、时事政治、以及热点新闻将是⼀种趋势。在这样的趋势下设计了这个Android⼿机新闻客户端APP。4.设计⽬的以实践为⽬的,通过⼀个或者多个完整Android项⽬的开发从⽽从实际中掌握Android开发的流程与开发技术。将Android开发课程中的诸多知识点运⽤于实际开中。熟悉Android开发⼯具的使⽤,了解并学会解决安卓开发中常见的错误。理解整个流程。学会框架的使⽤。5.技术介绍1.开发⼯具简介Android Studio是⼀个Android的开发环境,它是基于IintelliJ IDEA,类似于Eclipse,Android Studio提供了集成的开发环境和调试,从整体上不论是开发的效率还是开发的便捷程度都是⽐Eclipse简洁⽅便很多。在程序的调试⽅⾯也远⽐Eclipse⽅便很多。2.开发语⾔简介Android开发使⽤的是java+XML语⾔的⽅式。Java影响深远的⾯向对象编程语⾔。拥有着多种语⾔的特点,并且是跨平台的。因此java具有强⼤和简单易⽤两个特点。可以⽤来编写桌⾯应⽤程序、Web应⽤程序、分布式的系统和嵌⼊式的系统等。XML是⼀种简单的可扩展标记语⾔。是SGML的⼀个⼦集合,也就是他的简化版本,⾮常适合与web应⽤的开发和其他数据源之间的数据交换。3.使⽤技术介绍1.整体实现思路1.仿照市⾯上常见的软件,使⽤底部与顶部导航栏结合,侧滑的⽅式实现新闻数据的展⽰2.整体的页⾯布局使⽤的是RecycleView的嵌套的⽅式3.底部的4个Fragment切换和在每个Fragment中的ViewPage切换, 采⽤的是LuckyJayce/ViewPagerIndicator的开源框架4.新闻列表采⽤的是RecyclerView的⽅式5.顶部的沉浸式的状态栏使参考6.新闻详情的实现采⽤的⽅法是通过Android⾃带的类解析Html和html下标签的图像7.为数据的隐私和良好的⽤户体验在⼀般新闻客户端的基础上添加了登录注册模块以及切换主题等的功能。2.⽬前存在的问题1. 对于⽹页html的解析有⼀些问题,导致分类模块的不稳定2. 由于解析的问题,有事刷新后没有显⽰相应信息6.合计思路6.1功能分析该设计实现了在⼿机端浏览新闻的应⽤程序。⽤户通过下载应⽤程序,进⼊注册应⽤程序可以在程序中浏览各种新闻。可以砸热点、体育等多个板块之间进⾏切换。程序通过⽹络和相关的协议从⽹络中获取新闻数据,通过程序的适配器和布局⽂件将数据进⾏展⽰。⽤户通过注册登录的⽅式进⼊app中,然后对新闻进⾏浏览,可以对于浏览的主题进⾏切换,也可以通过menu浏览APP的相关介绍。在整体的布局上使⽤了底部菜案栏,上⾯分类栏的⽅式。利⽤适配器将页⾯和相对应的listitem适配茹相对应的⽂件中。对新闻进⾏展⽰。6.2 数据流图新闻客户端数据流图6.3 客户端状态图6.3 模块划分程序划分为登录模块、主页模块、滑动模块和数据展⽰模块和其他模块。登录⽤户⽤户的登录还验证,同时具有不同⽤户的信息隐藏的功能。主页模块是对于数据的初步展⽰和其他滑动模块的门额进⼊接⼝。滑动模块⽤于新闻的分类和数据的切换。其他模块⽤于对⽤户的信息进⾏查看和对于程序的主题进⾏更改、查询程序的有关信息。数据是通过url连接来⾃⽹络的数据。经过处理显⽰在新闻客户端。6.4 程序层次图7.程序实现及代码分析7.1⽤户登录⽤户登录模块分为欢迎界⾯和⽤户登录模块,使⽤⽤户登录的作⽤是因为事先⼀个⽤户⼀个账号,对于软件的操作内容和⽇志进⾏保密。⽤户可以在登录界⾯进⾏账号和密码的输⼊然后登录。如果没有账号和秘密,可以点击“注册”按钮进⾏注册,然后登录。在⽤户没有注册的时候会提⽰不存在账号请先注册,注册的⼈员如果输⼊账号和密码错误则显⽰提⽰信息。主要逻辑代码如下:public class welcome extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) { //getSupportActionBar().hide(); te(savedInstanceState); setContentView(ty_welcome); Button welcome_button= (Button)findViewById(_button); final VideoView welcome_Videoview =(VideoView)findViewById(e_Viderview); welcome_eoURI(("ce://"+kageName()+"/"+e)); welcome_(); welcome_ompletionListener(new letionListener() { @Override public void onCompletion(MediaPlayer mp) { welcome_(); } }); welcome_lickListener(new kListener() { @Override public void onClick(View v) { if(welcome_ing()){ welcome_ayback(); } Intent mIntent = new Intent(, ); startActivity(mIntent); } });}}登录主要代码:btn_lickListener(new kListener() {@Overridepublic void onClick(View view) { if (et_t().toString().equals(user_name) && et_t().toString().equals(password)) { Intent intent = new Intent(, ); startActivity(intent); editor = (); ing("user_name", user_name); ing("password", f(password)); (); } else { xt(, "⽤户名或密码错误", _LONG).show(); } }});7.2 主页⾯显⽰主页⾯显⽰主要完成的是从⽤户登录跳转到主页⾯,同时在主页⾯显⽰。在主页⾯建⽴相应的按钮,完成侧滑和类型的转换,同时在没有滑到相应的位置的时候完成数据的提前加载。主页⾯是其他页⾯的前提,也是进⼊⼝。主页⾯界⾯如图:主页⾯的逻辑代码如下:public class MainActivity extends AppCompatActivity {private IndicatorViewPager indicatorViewPager;private SystemBarTintManager tintManager;private ViewPager tabmain_viewPager;private LinearLayout main_learn;private Indicator indicator;@Overrideprotected void onCreate(Bundle savedInstanceState) { te(savedInstanceState); initWindow(); setContentView(ty_main); SViewPager viewPager = (SViewPager) findViewById(n_viewPager); Indicator indicator = (Indicator) findViewById(n_indicator); indicatorViewPager = new IndicatorViewPager(indicator, viewPager); pter(new MyAdapter(getSupportFragmentManager())); // 禁⽌viewpager的滑动事件 Scroll(false); // 设置viewpager保留界⾯不重新加载的页⾯数量 screenPageLimit(4); Toolbar toolbar = (Toolbar) findViewById(r); setSupportActionBar(toolbar); le(_name); setSupportActionBar(toolbar); invalidateOptionsMenu();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(_main, menu); return true;}@TargetApi(19)private void initWindow() { if (_INT >= N_) {getWindow().addFlags(_TRANSLUCENT_STATUS); getWindow().addFlags(_TRANSLUCENT_NAVIGATION); tintManager = new SystemBarTintManager(this); tusBarTintColor(getResources().getColor(_top_background)); tusBarTintEnabled(true); }}@Overridepublic boolean onOptionsItemSelected(MenuItem item) { int id = mId(); //noinspection SimplifiableIfStatement if (id == _settings) { Intent intent = new Intent(, ); startActivity(intent); //return true; } if (id == _settings_bg) { //tabIcons = {me_Base}; main_learn = (LinearLayout) findViewById(_learn); main_kground(FromPath("#DD2196F3")); //return true;#673AB7 action_wholeday } if (id == _wholeday) { Intent intent = new Intent(, ); startActivity(intent); //return true;#673AB7 action_wholeday } return onsItemSelected(item);}private class MyAdapter extends torFragmentPagerAdapter { private String[] tabNames = {"新闻", "阅读", "热点", "政要"};//, "我", b_5_selector private int[] tabIcons = {b_1_selector, b_2_selector, b_3_selector, b_4_selector, b_5_selector}; private LayoutInflater inflater; public MyAdapter(FragmentManager fragmentManager) { super(fragmentManager); inflater = (getApplicationContext()); } @Override public int getCount() { return ; } @Override public View getViewForTab(int position, View convertView, ViewGroup container) { if (convertView == null) { convertView = e(_main, container, false); } TextView textView = (TextView) ewById(_tab_content); t(tabNames[position]); ImageView image = (ImageView) ewById(_tab_img); geResource(tabIcons[position]); return convertView; } @Override public Fragment getFragmentForPage(int position) { Fragment mainFragment; mainFragment = new FirstLayerFragment(); Bundle bundle = new Bundle(); ing(_STRING_TABNAME, tabNames[position]); (_INT_INDEX, position); uments(bundle); return mainFragment; }}}7.3 新闻展⽰部分以及其他部分新闻展⽰部分是指在选中了相应的分类模块的新闻后点击相应的新闻的listitem部分之后会显⽰新闻的具体内容,这部分的实现是使⽤的Android中listview和适配器的使⽤部分。在对数据进⾏了处理之后再listitem中进⾏显⽰。其他部分指的是在点击“个⼈中⼼”和右上⽅的下拉menu之后会展⽰相应的功能,包括了主题的切换功能和关于啊APP的介绍部分。新闻详情展⽰页⾯和其他部分页⾯如图适配器部分代码:public class HorizontalImageRecyclerViewAdapter extends r implements hListener{ public HorizontalImageRecyclerViewAdapter(Context context, PhotoSet photoSet, RecyclerView recyclerView) { mContext = context; erView = recyclerView; mLayoutInflater = (context); et = photoSet; Resources r = ources(); float leftAndRightMargin = ension(_margin_left_and_right);//14px float imageMargin = ension(_margin_top_and_bottom);//20px viewConfiguration = (context); imageHeight = (int)ension(_big_image_item_height); imageWeight = (int)( - (leftAndRightMargin + imageMargin) * 2) / 3;}public void setPhotoSet(PhotoSet photoSet) { et = photoSet;}@Overridepublic int getItemViewType(int position) { return position == 0 ? 0 : position;}@Overridepublic lder onCreateViewHolder(ViewGroup parent, final int viewType) { View hold = e(_sub_image, parent, false); = parent; ImageViewHolder holder = new ImageViewHolder(hold, imageWeight, imageHeight, viewType); (viewType); ouchListener(this); return holder;}@Overridepublic void onBindViewHolder(lder holder, int position) { if (photoSet == null || tos() == null) { setNetworkImageView(((ImageViewHolder) holder).imageView, ""); } else { setNetworkImageView(((ImageViewHolder) holder).imageView, ebpImageForTextAndImageType(tos().get(position).getTimgurl(), imageWeight)); }}@Overridepublic int getItemCount() { return (photoSet == null || tos() == null) ? 3 : tos().size();}@Overridepublic boolean onTouch(View v, MotionEvent event) { Log.d("HorizontalImage", "child onTouchEvent" + ion()); long pressDuration = tTimeMillis() - pressStartTime; switch (ion()) { case _DOWN: { pressStartTime = tTimeMillis(); pressedX = (); pressedY = (); isIntercept = false; break; } case _MOVE: if (pressDuration <= pTapTimeout() && distance(pressedX, pressedY, (), ()) <= ledTouchSlop()) { } else { isIntercept = true; } break; case _UP: { if (pressDuration <= pTapTimeout() && distance(pressedX, pressedY, (), ()) <= ledTouchSlop()) { sendIntent(v); } else { isIntercept = true; } break; } } return true;}项⽬⽬录以及部分代码编写风格如图:8.总结本次的安卓开发课程设计收获颇丰。从整体上看Android课程设计不是很难,但是也不简单。不是很难是因为开发的环境、语⾔都是之前上安卓课的时候接触过的,学过的东西;也不简单是因为本次的课程设计整体上涉及了安卓开发的绝⼤部分的知识点内容。需要把学学的各⼤安卓的知识点实现在⾃⼰所写的项⽬中。从课设题⽬的选择到到布局的设计,图标的寻找、再到代码的逻辑实现和单元测试等各个部分都由个⼈完成。在这个过程中收获很多,但是也遇到了很多的问题。关于收获,在课程设计的过程中,我从总体上从⼯程的⾓度对安卓开发有了很深⼀步的了解,整体上对安卓开发的流程进⾏了实践性的学习。同时学会使⽤了安卓相应的开发框架,例如,在本次的新闻客户端的开发中学会使⽤了ViewPagerIndicator的框架,对于数据的侧滑页⾯的数据浏览使⽤了slidermenu的框架。因为新闻端的数据是来⾃于⽹上,所以对于使⽤hppt协议获取数据的相应操作⽅法也有了⼀定的了解。同时也学会了使⽤侧滑等⽅法对app的页⾯进⾏布局。在之前的安卓上课过程中对于每⼀个知识点都是分开做实验的,所以对于整体的⼯程的理解没有那么深刻,对⾯⾯向对象编程有了更多的理解。但是在开发的过程中也出现了很多的困惑与问题。⾸先在设置侧滑页⾯实现侧滑后界⾯的转变,还有在设置导航栏模块的跳转的时候,在适配器的使⽤⽅⾯遇到了很多的问题,导致⼀直报错,其次,对于⽹络上数据的存储和处理展⽰不是很理解,导致在开发的过程中花费了较多的时间在这⼀部分内容。在使⽤⽹络数据的时候,不会将数据转化,然后进⾏显⽰,出现了很多的问题,之后慢啊慢才解决。特别是寻找数据的尾部和起始位置花费了⽐较多的时间。在使⽤适配器对导航栏的的pageview进⾏适配的时候也出现了⼀些问题,参数的传递出现问题,listitem不能正常显⽰等等,最后在重新学习有关适配器知识,理解了原理后重新编程,bug也随之解决了。课程设计也是磨炼性⼦的⼀种⽅式,为了做的更好看⼀点,我尝试了布局⽅⾯的⽅案,配⾊、选择图标图⽚等等,最后感觉不论是从布局还是从基本功能的实现都基本达到了⾃⼰的要求。总之,本次的Android开发课程设计收获很⼤,我不仅巩固了之前上课学到的知识,⽽且在开发过程中遇到问题解决问题,在这个过程中⼜学到了很多的新东西,可以说是受益匪浅。

发布者:admin,转转请注明出处:http://www.yc00.com/news/1689429780a246866.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信