配色: 字号:
《Android模块化项目实战》05 健康助手写字字帖
2023-05-24 | 阅:  转:  |  分享 
  
项目五 健康助手通过U酒保项目健康助手模块的实现,学习折线图的构建方法,了解图片下沉动画的使用方法,掌握如何使用AsyncTask类实现更新
UI,在任务实现过程中:了解ViewGroup和View区别掌握自定义控件的使用掌握自定义动画的使用掌握AsyncTask类的使用
U酒保研发团队根据用户的需求设计并开发了酒精数据统计功能,可将历史酒精浓度值以折线图的方式展示,方便用户再次使用时进行查询比对。该
软件还设有娱乐模块、微博模块、笑话模块用来丰富业余生活。本项目通过数据监测模块的实现,讲解了折线图以及自定义控件的使用方法。And
roid中所有的UI类都以View和ViewGroup为基础?。其中View是与用户交互控件的父类,在项目开发过程中,具有重要作用
,主要用于在界面中获取矩形区域,完整的实现自定义组件。ViewGroup是存放View的容器,主要用于管理其包含的View控件。V
iew类中提供了多种方法用来构建自定义组件。 ?自定义组件简介View定义了完整的绘图基本操作,用于自定义组件的构建,在构建过程中
,需重写onMeasure()、onLayout()、onDraw()方法。onMeasure()的用法。绘制View前使用onM
easure()调用setMeasuredDimension()方法对其进行测量。onLayout()的用法。onLayout()
主要根据View在Measure()中测量的大小决定其摆放位置。自定义组件方法onDraw()的用法。Canvas为系统提供一块内
存区域,所有绘制都在该内存中进行,绘制完成后系统将布局显示到屏幕中。该Canvas对象提供各种绘制点、线、矩形、圆、位图的方法,基
本可满足各种绘制要求。onDraw()主要是用来把所有View都绘制在同一个画布上,达到将canvas内容显示屏幕上。在绘制自定义
组件时先调用onDraw()方法后调用Draw()方法实现。自定义组件方法Animation提供了一系列的动画效果的API,具有渐
变透明度动画效果(alph),渐变尺寸伸缩动画效果(scale),画面转换位置移动动画效果(translate),画面转移旋转动画
效果(rotate)等四种动画效果。Animation动画简介Animation通过对View完成一系列图形变换,实现动画效果。定
义一组指令,指令指定图形变换类型、触发时间、持续时间。指令可以是以 XML 文件方式定义,也可以是以源代码方式定义。程序沿时间线执
行指令便可实现动画效果。Animation方法(1)XML动画Animation从总体上可以分为三类:Tweened Animat
ion(补间动画),补间动画方式如表5.3所示。Animation方法Frame Animation(逐帧动画),逐帧动画方法如表
5.4所示。Animation方法Property Animation(属性动画),该类Animation与补间动画相似,属性动画
属性如表5.5所示。Animation方法(2)自定义动画Android中的图形绘制需要继承View组件,并且重写它的onDraw
(Canvas canvas)方法。重写onDraw(Canvas canvas)方法时涉及绘图API:Canvas,Canvas
代表“依附”于指定的View画布。Animation方法自定义动画实现步骤如下所示:自定义View的派生类AnimatorView
,调用图形数据,并设置画笔及其风格。在派生类AnimatorView中定义待绘制的图形数据(宽度、间距、速度、颜色、次数)。通过重
载onDraw()方法,设置画笔、坐标位置,实现矩形方块的绘制。在MainActivity中遍历AnimatorView类,展示该
动画展示在界面。通过以上步骤实现如图5.7自定义动画效果。Animation方法AsyncTask是Android提供的轻量级异步
类,可直接继承AsyncTask在类中实现异步操作,并提供接口反馈当前异步执行程度(可以通过接口实现UI进度更新),然后反馈执行结
果传递到UI主线程。AsyncTask是封装后的后台任务类,具有结构清晰、功能定义明确,对于多个后台任务时,具有简单,清晰等特点。
AsyncTask简介AsyncTask抽象出后台线程运行的五个状态,并提供了五个回调函数:onPreExecute():该回调函
数在任务被执行后立即由UI线程调用。该步骤用来建立任务,在用户接口(UI)上显示进度条(准备运行)AsyncTask类方法doIn
Background(Params...):该回调函数由后台线程在onPreExecute()方法执行结束后立即调用。在这里执行耗
时的后台计算。计算的结果必须由该函数返回,并被传递到onPostExecute()中。在该函数内也可以使用publishProgr
ess(Progress...)来发布一个或多个进度单位(unitsof progress)。这些值将会在onProgressUp
date(Progress...)中被发布到UI线程(后台运行)AsyncTask类方法onProgressUpdate(Prog
ress...):该函数由UI线程在publishProgress(Progress...)方法调用完后被调用。一般用于动态显示一
个进度条(进度更新)onPostExecute(Result):当后台计算结束后调用。后台计算的结果会被作为参数传递给这一函数(完
成后台任务)onCancelled ():在调用AsyncTask的cancel()方法时调用(取消任务)AsyncTask类方法
实现进倒计时的功能。时长5s,当时间结束时在界面显示结束时间并提醒用户倒计时结束,效果如图5.8、图5.9所示。使用AsyncTa
sk类示例实现倒计时功能步骤如下所示:(1)初始化界面,点击“开始”按钮,调用异步类开始倒计时。(2)构建AsyncTask方法。
(3)TestAsyncTask被后台线程执行后, UI线程被调用,一般用于初始化界面控件。 (4)调用doInBackgroun
d()方法进行数据的实时获取并将数据进行返回。(5)将doInBackground()方法中返回的数据显示到界面,进行UI的实时更
新。(6)运行项目,实现图5.8、图5.9所示效果。使用AsyncTask类示例通过如下步骤实现如图5.2所示U酒保健康助手模块。
第一步:在Android studio中创建一个Android工程,命名为“UJB_AIFragment”。第二步:导入实现折线图
MPChartLib.jar,具体步骤如下所示。(1)复制MPChartLib.jar包,添加到如图5.11所示目录下。使用Asy
ncTask类示例(2)选择该项目,右击鼠标出现如图5.12所示界面,点击“Open Module Settings”,跳转到下一
界面,选择app? Dependencise。(3)单击“+”显示选择栏,如图5.14所示。选择File dependency,跳
转到下一界面,选择添加的jar包后点击“OK”。第三步:使用onDraw()方法,新建MyImageView.java自定义矩形图
片区域,用于放置笑话、娱乐、科普等图片。第四步:实现自定义界面布局,调用MPChartLib.jar包与MyImageView.j
ava显示矩形图片框和折线图界面fragment_advise.xml。使用AsyncTask类示例第五步:获取酒精数据Json串
并解析,设置折线图属性,并将解析的酒精浓度数据添加到折线图中进行显示。第六步:使用OnClick()方法设置图片点击跳转事件,点击
界面中科普、笑话、娱乐等图片,实现对应界面的跳转。第七步:使用onTouchEvent()方法实现图片触摸事件,当用户触摸图片边缘
或中心时,实现图片对应部位的下沉效果。第八步:点击科普按钮,跳转到科普界面通过异步类获取科普信息,并显示到界面。第九步:运行程序,
运行结果如图5.2所示。使用AsyncTask类示例本项目主要介绍了U酒保健康助手模块的实现。通过自定义组件、自定义动画,实现折线
图和图片下沉效果,采用异步请求获取网络数据,并更新UI。在项目学习过程中可以了解自定义组件和自定义动画的使用方法,掌握异步类的使用
原理。 measure 测量 layout 布局draw
绘制 asyncTask 异步任务progress 进度 params 参数group 组 event 事件detached 独立的 attached 附属的
献花(0)
+1
(本文系大高老师首藏)