废话不多说了,具体代码如下所示:
public class LetterView extends View {
private String TAG = LetterView.class.getSimpleName();
//A,B,C....Z,#
public List<String> letters;
private Paint mPaint;
private int selectPosition = -1;
private TextView mLetter;
public void setmLetter(TextView mLetter) {
this.mLetter = mLetter;
}
public LetterView(Context context) {
this(context,null);
}
public LetterView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public LetterView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//生产字母
letters = new ArrayList<>();
for (int i = 65; i < 91; i++) {
letters.add(String.format(Locale.CHINA,"%c",i));
Log.e(TAG, "LetterView: "+ String.format(Locale.CHINA,"%c",i));
}
letters.add("#");//追加一个#
//初始化画笔
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setColor(Color.BLUE);
mPaint.setTextSize(30);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
/**
* 获取View的宽度
* 获取View的高度
*/
int width = getMeasuredWidth();
int height = getMeasuredHeight();
//测量字的宽度
int size = letters.size();
for (int i = 0; i < size; i++) {
float textWidth = mPaint.measureText(letters.get(i));
int singleHeight = height / size;
if (selectPosition == i){//被选中的
mPaint.setColor(Color.RED);
}else{
mPaint.setColor(Color.BLUE);
}
canvas.drawText(letters.get(i),(width - textWidth)/2, singleHeight * (i + 1),mPaint);
/**
* drawText() x y \_ 为基准线
*/
invalidate();
}
}
/**
* Android将触摸事件封装,包装了动作,位置信息;onClick也是一种motionEvent
* onClick 事件 实际上是 onTouchEvent事件
* @param event
* @return
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
//包装了动作,位置信息
// event.getY();//相对于View本身的坐标值
// event.getRawY();//返回的是相对于屏幕的坐标值
float y = event.getY();
Log.e(TAG, "onTouchEvent: Y:"+ y);
// Log.e(TAG, "onTouchEvent: RawY:"+event.getRawY() );
int measuredHeight = getMeasuredHeight();
int singleHeight = measuredHeight / letters.size();
int position = (int) (y / singleHeight);
Log.e(TAG, "onTouchEvent: " + position );
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
Log.e(TAG, "onTouchEvent: ACTION_MOVE" );
case MotionEvent.ACTION_DOWN:
Log.e(TAG, "onTouchEvent: ACTION_DOWN" );
selectPosition = position;
if (mLetter != null) {
mLetter.setVisibility(View.VISIBLE);
//极限情况有可能下标越界,需要判断一下
if (position < letters.size() && position >= 0){
mLetter.setText(letters.get(position));
}
}
break;
case MotionEvent.ACTION_UP:
Log.e(TAG, "onTouchEvent: ACTION_UP" );
selectPosition = -1;
if (mLetter != null) {
mLetter.setVisibility(View.GONE);
}
break;
}
//返回true代表事件被处理了
return true;
}
}
# android
# 自定义view
# Android编程自定义title bar(标题栏)示例
# Android自定义TitleView标题开发实例
# Android使用setCustomTitle()方法自定义对话框标题
# Android中自定义Window Title样式实例
# Android编程自定义Dialog的方法分析
# Android编程自定义圆角半透明Dialog的方法
# android自定义View滑动删除效果
# Android自定义TabLayout效果
# Android自定义手机界面状态栏实例代码
# Android实现自定义圆角对话框Dialog的示例代码
# Android动态自定义圆形进度条
# Android编程实现自定义title功能示例
# 相对于
# 装了
# 的是
# 有可能
# 说了
# 不多
# 坐标值
# 所示
# AttributeSet
# null
# attrs
# defStyleAttr
# context
# mLetter
# ArrayList
# void
相关文章:
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
如何在万网自助建站平台快速创建网站?
建站之星如何快速解决建站难题?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
内部网站制作流程,如何建立公司内部网站?
如何快速搭建安全的FTP站点?
如何高效利用200m空间完成建站?
如何在IIS管理器中快速创建并配置网站?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
如何规划企业建站流程的关键步骤?
MySQL查询结果复制到新表的方法(更新、插入)
如何在阿里云通过域名搭建网站?
广东企业建站网站优化与SEO营销核心策略指南
网站制作公司,橙子建站是合法的吗?
c# 在高并发场景下,委托和接口调用的性能对比
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何快速完成中国万网建站详细流程?
如何快速搭建高效WAP手机网站?
建站主机如何安装配置?新手必看操作指南
,南京靠谱的征婚网站?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何在云主机上快速搭建网站?
制作表格网站有哪些,线上表格怎么弄?
宁波免费建站如何选择可靠模板与平台?
如何通过二级域名建站提升品牌影响力?
建站之星备案流程有哪些注意事项?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
网站制作企业,网站的banner和导航栏是指什么?
如何续费美橙建站之星域名及服务?
如何在宝塔面板中修改默认建站目录?
如何在西部数码注册域名并快速搭建网站?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
制作网站的模板软件,网站怎么建设?
如何通过NAT技术实现内网高效建站?
如何通过免费商城建站系统源码自定义网站主题与功能?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
网页设计网站制作软件,microsoft office哪个可以创建网页?
如何选择适配移动端的WAP自助建站平台?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
想学网站制作怎么学,建立一个网站要花费多少?
如何快速搭建高效服务器建站系统?
建站之星收费标准详解:套餐费用及年费价格表一览
*请认真填写需求信息,我们会在24小时内与您取得联系。