项目五 健康助手通过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 附属的 |
|