Android自定义控件之仿通讯录联系人

开始介绍这个控件的生成之前先来贴张图:
这里写图片描述
从图中可以看出这个控件是一个组合控件,右边呢是一个可触摸滑动的View,中间呢是一个显示右边触摸过程中的字和一个圆形的背景,首先先来分析一下实现思路,这里呢可以分为三步:第一实现右边的A-Z的字母以及触摸过程中对中间View的传递;第二步实现中间的View,圆形背景图和可变的字母,第三步将两个View组合起来实现触摸的监听。接下来就来一一的实现。
第一步:右边的控件,
(1):定义一个A-Z的数组来显示
(2):对每个字母的高度进行测量,其中包括上padding和下padding
(3):在View中逐一绘制出这些字母
(4):对这个View的touch事件进行判定
(5):对当前触摸过程中选中的字母进行传递
1:定义数组
String[] cotents = {“A”, “B”, “C”, “D”, “E”, “F”, “G”,
“H”, “I”, “J”, “K”, “L”, “M”, “N”, “O”, “P”, “Q”, “R”,
“S”, “T”, “U”, “V”, “W”, “X”, “Y”, “Z”};
2:测量每个文本的高度
int strHeight = (int) (strPaint.descent() - strPaint.ascent());
在onMeasure方法中二次测量
case MeasureSpec.EXACTLY:
return size;
case MeasureSpec.AT_MOST:
switch (type) {
case 1:
//返回宽度的测量结果
return (int) strPaint.measureText(cotents[0]) + getPaddingLeft() + getPaddingRight();
case 2:
//返回高度的测量结果
return (strHeight * cotents.length) + getPaddingTop() + getPaddingBottom();
}
break;
3:绘制字母
canvas.drawText(cotents[i], getWidth() / 2 - strPaint.measureText(cotents[i]) / 2,(i + 1) * strHeight,strPaint);
4:对touch事件监听
这里写图片描述
5:对选中View的字母进行传递我使用的方式是接口回调
public interface OnTouchSlidBarListener {
void selectWord(String word, int postition);//选中那个字母
void unTouch();//未选中
}
到此侧边栏的控件也就绘制结束,接下来开始实现中间的View,从效果图来看,这个地方是由一个背景是圆,内部是字母来显示的View,思路呢是分别把他们“画”出来。
第二步:中间的View
(1)定义画笔,一个画圆,一个画字
(2)获取到传递过来的字母再开始画。
1:画笔的定义
private Paint criclePaint;
private Paint txtPaint;

    criclePaint = new Paint();
    criclePaint.setColor(Color.parseColor("#39a6d9"));
    criclePaint.setAntiAlias(true);//抗锯齿

    txtPaint = new Paint();
    txtPaint.setAntiAlias(true);
    txtPaint.setTextSize(80);

在onDraw方法中绘制
这里写图片描述
第三步:组合两个控件
(1)定义一个类继承于FrameLayout,利用LayoutInflater转换组合的布局来实现这个View
(2)利用接口回调的方式将当前所获取到的字母传给主布局
1:LayoutInflater.from(getContext()).inflate(R.layout.custem_broadside_labelview, this, true);参数介绍在下面
如果第二个参数不为空,但是第三个参数为false
表示视图中的最外层布局的属性被保留
如果第二个参数不为空,但是第三个参数为true
表示视图中最外层布局的属性被保留,并且该视图对象直接添加到第二个参数所表示的容器对象中
2:定义接口,传递当前位置的字母,然后由主页面去实现这个接口来实现相应的逻辑操作
public interface OnSelectorListener{
void selectWord(String word, int position);
}
到此整个自定义的组合的仿通讯录联系人的控件就实现了,贴上我的所有实现代码:源码下载
谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值