分享结构:
第三方登录
是什么?
通过第三方的账号进行授权,然后提取信息进行登录
优点?
省去了注册环节,直接获取手机上的对应第三方信息进行登录
缺点?
介入稍微繁琐,账号信息会暴露给应用
大概实现方式?
第三方平台注册应用,得到ID,下载第三方的工具包,导入项目,要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的id。完成之后便能与微信进行通信,发送登录请求然后会返回code,然后通过code获取到acces_token,opened,此ID是唯一,不管在哪都是一样的,然后提取合适信息进行操作。
体会?
使用第三方登录时:开放平台注册MD5要正确、报名要跟官方约束一致、登录代码不能被混淆
动态的加载提示和点击效果
为什么使用动态效果
赋予项目活力,生命力
优点
提高了交互体验,
缺点
对手机性能有一定要求,耗电等
方式
在此是用的GIF,和属性动画
体会
提高了交互体验,增加了可玩性,使项目不再呆板
属性动画ObjectAnimator:
是继承自ValueAnimator的,底层的动画实现机制也是基于ValueAnimator来完成的,因此ValueAnimator仍然是整个属性动画当中最核心的一个类。那么既然是继承关系,说明ValueAnimator中可以使用的方法在ObjectAnimator中也是可以正常使用的,它们的用法也非常类似
是调用了ofFloat()方法来去创建一个ObjectAnimator的实例,只不过ofFloat()方法当中接收的参数有点变化了。第一个参数要求传入一个object对象。
组合动画:
实现组合动画功能主要需要借助AnimatorSet这个类,这个类提供了一个play()方法,如果我们向这个方法中传入一个Animator对象(ValueAnimator或ObjectAnimator)将会返回一个AnimatorSet.Builder的实例,AnimatorSet.Builder中包括以下四个方法:
- after(Animator anim) 将现有动画插入到传入的动画之后执行
- after(long delay) 将现有动画延迟指定毫秒后执行
- before(Animator anim) 将现有动画插入到传入的动画之前执行
- with(Animator anim) 将现有动画和传入的动画同时执行
GIF实现类的简要说明:
重写了ImageView中所有的构建函数,首先,我们调用了getResourceId()方法去获取图片资源对应的id值,在getResourceId()方法内部是通过Java的反射机制来进行获取的。得到了图片资源的id后,我们将它转换成InputStream,然后传入到Movie.decodeStream()方法中以解码出Movie对象。如果得到的Movie对象等于null,说明这是一张普通的图片资源,就不再进行任何特殊处理,因为父类ImageView都帮我们处理好了。如果得到的Movie对象不等于null,则说明这是一张GIF图片,接着就要去获取是否允许自动播放、图片的宽高等属性的值。
接下来会进入到onMeasure()方法中。在这个方法中我们进行判断,如果这是一张GIF图片,则需要将宽高重定义,使得控件的大小刚好可以放得下这张GIF图片。
再往后就会进入到onDraw()方法中。在这个方法里同样先判断当前是一张普通的图片还是GIF图片,如果是普通的图片就直接调用super.onDraw()方法交给ImageView去处理就好了。如果是GIF图片,则先判断该图是否允许自动播放,允许的话就调用playMovie()方法去播放GIF图片就好,不允许的话则会先在自定义类中绘制该GIF图片的第一帧,并在图片上绘制一个播放按钮,当用户点击了播放按钮时,再去调用playMovie()方法去播放GIF图片。
播放的实现,首先会对动画开始的时间做下记录,然后对动画持续的时间做下记录,接着使用当前的时间减去动画开始的时间,得到的时间就是此时自定义类应该显示的那一帧,然后借助Movie对象将这一帧绘制到屏幕上即可。之后每次调用playMovie()方法都会绘制一帧图片,连贯起来也就形成了GIF动画。注意,这个方法是有返回值的,如果当前时间减去动画开始时间大于了动画持续时间,那就说明动画播放完成了,返回true,否则返回false。