“阶段一”是指我第一次系统地学习Android开发。这主要是对我的学习过程作个记录。

上一篇阶段一:通过网络请求,获得并解析JSON数据(天气应用)完成了应用的核心功能,接下来就要对它进行优化。今天我先优化它的部分UI和设置一些动画。

首先,说明一下,这部分都是我现学现做的,弄的时候也挺折腾的,所以我想先把整个过程的心得分享一下。

我是打算把应用弄成google的Material design风格,它的内容很多,就这一步来说,只要实现两点,一是显示信息的TextView有阴影,像卡片似的,二是这些TextView是从左向右弹出来的。清楚要实现什么效果之后,就去寻找实现的方法。有这么明确的目的,对于现在的我,最好就是百度一下,因为这么细的地方,工具类的书很少会讲到,然后我还会打开官方提供的API文档和金山词霸。因为这过程有这么几种情况,一是关键词不对,搜不到相关内容,这没办法,只能换关键词继续搜,二是搜到的教程讲得云里雾里的,这有可能是作者的问题,也有可能是我不懂这方面的知识,所以就需要查看API文档,另外即使教程讲得很清楚,最好也查看文档对照一下,除了能了解更多之外,还有就是因为有可能存在版本差异。

另外阅读API文档是比较苦的,不只是因为它是全英文的,还因为它的内容很多。看教程时,看到某些标签或关键词,但又不知道在文档的哪里,可以在Android Studio中输入代码,然后按住ctrl,指向代码,就会显示它是属于哪个包,另外还可以直接按ctrl + shift + N输入关键词,也会显示出来。下面讲解时,我会给出这些标签是在文档的哪里。最后,因为我弄不了它的动态图,所以想看动画效果的朋友可以自己写一下,很简单的两步。

一、实现TextView带阴影

先上效果图

虽然阴影不大,但是应该能看出有什么变化吧。这里跟上一篇相比,多了几个TextView,这都是用来显示天气信息的,只要在上一篇解析JSON数据那里修改一下就可以了。

然后下面是代码,这个我是根据网上的一篇教程来做的

这是一个放在res/drawable/下的xml文件。

下面是先把它添加到styles.xml中,然后在TextView中引用这个style

说明:

(1)这个<layer-list>里面可以存放其它drawable对象,只不过其它对象要包括在<item></item>里面,每一个对象就是一个item。这种关系有点像布局文件中布局方式和其中的view。

(2)<shape>就是画一个形状出来。

(3)<solid>只有color属性,这个标签的作用就是用这个color填充这个形状。

(4)<corners>只有在形状为rectangle矩形时,才有作用,就是把矩形变成圆角。

(5)<item android:left="1dp" android:bottm="1dp">就是控制上层形状偏移,其实这不太像偏移,因为从AS的预览效果来看,它没有移动的感觉,而是减掉了1dp的长度。当然这预览效果也有点怪,在<item>里写一个属性时,能正常预览,但写多一个就完全变形了。

这个实现阴影的原理是两个相同的矩形重叠在一起,然后上层偏移,底层显露的部分就是阴影。所以底层形状的颜色就是阴影的颜色。上层的颜色就是TextView的background颜色。

这里的所有标签的介绍和解释都在下面的这个Drawable中,这个是点击API Guides之后出现的

二、实现TextView从左向右弹出

动画部分内容很多,我蒙了很久,才知道只需View Animation中的Tween animation里的<scale>属性就能做到我要的效果。

先在xml中设置动画属性

这是一个在res/anim/下的xml文件(anim是自己创建的文件夹)

说明:

(1)这里其实可以直接用<scale>作为根元素。

(2)<set>是一个可以包含其它元素的容器,类似于上面的<layer_list>。

(3)fromXScale="0.0",toXScale="1.0",这意思是从无到有,而且最终为正常大小,小于1.0是缩小,大于1.0是放大,所以0.0代表大小为0,1.0代表正常大小。注意这里y轴是没有发生变化的。因为我需要的是TextView在x轴方向上从左向右弹出的效果。如果想从右开始,就把pivotX设置为100%就可以了。

(4)pivotX和pivotY="0%",这意思是动画开始的位置,0%相当于原点,50%就是中点。坐标情况跟之前讲阶段一:drawText的位置问题和Stroke、drawArc的相关问题时提到的一样,x越往右越大,y越往下越大。

(5)其实fromXScale和pivotX这两个属性的关系有点奇妙,好比现在我这里的fromYScale和toYScale都是1.0,这时pivotY="0%"是没意义的,其实删掉这个属性也是没问题的,因为y轴方向没变化,所以也就没有所谓的开始位置。

(6)duration="300",意思是动画从播放到结束用时300毫秒,也就0.3秒,也就是说这个属性是设置动画的持续时间。

(7)android:interpolator="@android:anim/accelerate_interpolator",这句作用是调用系统提供的速度控制器,这里是调用加速器,加速播放,系统提供的还有其它播放模式的控制器。

然后在.java中设置动画播放

其实我实现的效果是4个显示天气信息的TextView依次弹出来,要做到这个效果,我是在<set>标签中添加android:startOffset="300"这个属性,其实还可以在.java中添加zoominAnimation.setStartOffset(300);这个方法,作用是延迟300毫秒再开始播放动画。当然,要4个TextView依次弹出来,还要分别设置。

上面的<set>、<scale>标签和其它属性,都在上面API文档那图的Animation里有详细介绍,从那里你会知道更多更全的有关Animation的事情。

阶段一:为View设置阴影和弹出动画(天气应用)的更多相关文章

  1. IOS项目之弹出动画终结篇

    在之前写过IOS项目之弹出动画一.IOS项目之弹出动画二.IOS项目之弹出动画三,今天来一个终极封装已经上传到Github上弹出动画总结篇UIPopoverTableView. UIPopoverTa ...

  2. IOS项目之弹出动画二

    在IOS项目之弹出动画一中只是实现也功能,并没有体现面向对象的思想 ,今天就试着把它封装了一下,弹出视图的内容可以根据自定义,此处只是用UIDatePicker来演示 我把它传到了GitHub上    ...

  3. IOS项目之弹出动画三

    前面写了弹出动画两个,今天做商城时又用到了,看着这个用着蛮普遍的,所以记了下来 // // mallMoreView.h // XQB // // Created by City--Online on ...

  4. mac关闭渐隐和弹出动画效果

    苹果系统应用程序的窗口和对话框每次使用的时候都有华丽的特效,但是如果你感觉这种特效显得有点慢(MacGG闲的蛋疼),那该如何取消掉他呢? 方法很简单,打开"终端"(Finder-& ...

  5. IOS项目之弹出动画一

    小区宝首页导航栏左边有一个物业按钮,点击时会出现一个视图动画,之前用的是一个POP第三方,想着几个POP动画就要引用一堆的第三方有点麻烦,就试着自己写了一下,功能实现了,下一步就是优化将其封装一下.下 ...

  6. WPF制作子窗体的弹出动画效果

    创建一个WPF应用程序WpfApplication1,新建个窗体DialogWin <Windowx:Class="WpfApplication1.DialogWin" xm ...

  7. 原生Js_实现简单的下拉折叠菜单(添加弹出动画效果)

    用javascript实现简单的下拉折叠菜单效果 实现步骤 (a)获得各操作的dom对象: (b)在所有菜单按钮对象上添加单击事件: (c)设置所有菜单按钮样式为空,并将当前按钮的样式设置为“acti ...

  8. 【VS开发】MFC动态设置对话框属性 弹出或嵌入

    参考: MFC的对话框CDialog是怎么控制窗口可调整大小的属性的呢?打开资源文件,对话框资源的属性列表中,有一个"Border"项,改变该项的值就可以改变窗口边框风格.实际上w ...

  9. swift uiview弹出动画

    UIView.animateWithDuration(0.5, delay: 0.0, usingSpringWithDamping: 0.3, initialSpringVelocity: 0.0, ...

随机推荐

  1. javascript中的变量作用域以及变量提升

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解. 变量作用域 “一个变量的作用域表示这个变量存在的上 ...

  2. jQuery +ajax +json+实现分页

    正文 首先我们创建一般处理程序,来读取数据库中内容,得到返回值. 创建文件,GetData.ashx. 我这里是用的存储过程,存储过程会再下面粘出来,至于数据只是实例,你们可根据需求自行读取数据 代码 ...

  3. Android点滴

    1,View中getWidth(),getLayoutParams.width,getMeasureedWidth()的区别 2,setCompoundDrawables和setCompoundDra ...

  4. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(16)-权限管理系统-漂亮的验证码

    系列目录 我们上一节建了数据库的表,但我发现很多东西还未完善起来,比如验证码,我们先做好验证码吧,验证码我们再熟悉不过了,为了防止恶意的登录,我们必须在登录页面加入验证码,下面我将分享一个验证码,这个 ...

  5. spring boot(三):Spring Boot中Redis的使用

    spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结 ...

  6. IIS7.5上的REST服务的Put,Delete操作发生HTTP Error 405.0 - Method Not Allowed 解决方法

    WebDAV 是超文本传输协议 (HTTP) 的一组扩展,为 Internet 上计算机之间的编辑和文件管理提供了标准.利用这个协议用户可以通过Web进行远程的基本文件操作,如拷贝.移动.删除等.在I ...

  7. c#编程基础之枚举

    枚举的意义就在于限制变量取值范围. 当可以确定的几种取值时才可以用. 如果输入一个字符串需要进行判断是否是我们需要的字符串时,则一般需要这样写: using System; using System. ...

  8. 编写高质量代码:改善Java程序的151个建议(第4章:字符串___建议56~59)

    建议56:自由选择字符串拼接方法 对一个字符串拼接有三种方法:加号.concat方法及StringBuilder(或StringBuffer ,由于StringBuffer的方法与StringBuil ...

  9. html+ccs3太阳系行星运转动画之土星有个环,地球有颗小卫星

    在上一篇<html+ccs3太阳系行星运转动画>中实现了太阳系八大行星的基本运转动画. 太阳系又何止这些内容,为丰富一下动画,接下来增加“土星环”和“月球”来充盈太阳系动画. 下面是充盈后 ...

  10. Angular2中对ASP.NET MVC跨域访问

    应用场景 项目开发决定使用angular2进行前后端分离开发,由我负责后端服务的开发,起初选择的是web api进行开发.对跨域访问通过API中间件+过滤器对跨域访问进行支持.开发一段后,通知需要移植 ...