Android自定义控件之组合控件。
在前面的自定义控件概述中已经跟大家分享了Android开发当中自定义控件的种类。今天跟大家分享一个非主流的组合控件。
我们在开发当中,难免需要在不同的场合中重复使用一些控件的组合。而Java的最高目标呢,是消灭所有重复代码。这个时候怎么办呢?办法之一就是创建一个囊括逻辑和布局的视图,以便可以重复使用而不用在不同的场合中写重复的代码。代码复用的同时我们还把逻辑包装到了控件内部,做到更好的解耦。比如我们App页面中的顶栏等等。
今天呢,跟大家分享一个我前一阵子在项目中遇到的实例。先看下效果图:
需求:
- 该控件可以左右滑动。
- 底部积分是一个等差数列,可以自己定义。积分初始为半透明,小红旗下方显示设定的最大值。小火箭会飞到当前用户对应的积分位置,用户得到的积分在小火箭动画之后会显示为白色,同时当前积分位置出现一条标识线。
- 动画开始的时候小火箭会从0开始移动,直到当前积分位置,在移动过程中小火箭会有一个喷射火焰的效果。
- 背景会随着火箭的移动而移动,当动画结束的时候,保证小火箭在屏幕中心。
实现方式:
自己写一个类继承HorizontalScrollView,HorizontalScrollView会帮我们处理左右滑动的事件,否则还要重写ontouchEvent自己处理滑动。然后加载一个布局文件,给小火箭加一个帧动画和位移属性动画,实现小火箭的移动和喷火动画。同时自定义一个动画,来处理控件本身的滑动。
需要的技能点:
1.Android的view动画和属性动画,以及简单的自定义动画。
2.view的绘制流程,详情参照Androd自定义控件(一)概述 。
3.Activity中view的加载机制。
4.Android中dp,px等单位的概念。
5.用代码创建控件。
6.LayoutParams的使用方法。
具体实现:
初始化,在这里我们让一个参数的构造方法调用两个参数的构造方法,两个参数的构造方法调用三个参数的构造方法,把初始化的方法放到三个参数的构造方法当中。在初始化方法中加载布局文件。
|
|
布局文件
|
|
然后在onlayout方法中拿到我们需要的底部标注的长度,用来计算小火箭和view动画的位移。
|
|
设置显示标注线
|
|
火箭的动画
|
|
因为scroller自带的滚动插值器与火箭动画插值器不同步,所以使用自定义动画实现控件的平滑滚动
|
|
调用
|
|
这里我们在onWindowFocusChanged回调中调用,保证在控件加载完成之后再设置参数。
到这里这个控件就基本完成了。其实还有很多可以优化的地方,比如把一些属性抽离出来,写成自定义属性,还有下标根据传入数组动态生成等等,有兴趣的朋友可以交流一下。源码地址。