自定义View
LetterView.java

package com.qf.sxy.customview02;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;/*** Created by sxy on 2016/9/29.*/
public class LetterView extends View {// 索引的字母public  static final String[] LETTES ={"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"};private Paint mTextPaint;//指定一个位置  不在索引范围内private int pressedPosition = -1;//获取展示的Viewprivate TextView mSelectView;public void setSelectTextView(TextView tv){this.mSelectView = tv;}public LetterView(Context context, AttributeSet attrs) {super(context, attrs);//初始化画笔initPaint();}private void initPaint() {mTextPaint = new Paint();mTextPaint.setAntiAlias(true);mTextPaint.setColor(Color.RED);mTextPaint.setTextSize(30);}public LetterView(Context context) {this(context,null);}/*** 进行绘制* @param canvas*/@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);//获取 宽和高int height = getHeight();int width = getWidth();//字符串序列的长度int lettersLength = LETTES.length;//获取每个字符的高度int singleHeight = height/lettersLength;//开始绘制for(int i=0;i<lettersLength;i++){//获取x的位置int xPos = (int)(width/2-mTextPaint.measureText(LETTES[i])/2);//获取Y的位置int yPos = singleHeight+i*singleHeight;//设置文字颜色if(pressedPosition == i){mTextPaint.setColor(Color.BLUE);}else{mTextPaint.setColor(Color.BLACK);}//绘制文本canvas.drawText(LETTES[i],xPos,yPos,mTextPaint);}}/*** 触摸事件** true  消费事件  false 不处理* @param event* @return*/@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()){case MotionEvent.ACTION_DOWN://按下case MotionEvent.ACTION_MOVE://移动//获取手指的Y位置float eventY = event.getY();//每个字母单独的高度int singleHeight = getMeasuredHeight()/LETTES.length;//获取你当前索引位置pressedPosition = (int)(eventY/singleHeight);//显示提示的VIew  设置内容if(mSelectView!=null){if(pressedPosition>=0&&pressedPosition<LETTES.length){mSelectView.setVisibility(View.VISIBLE);mSelectView.setText(LETTES[pressedPosition]);}}invalidate();//刷新break;case  MotionEvent.ACTION_UP://抬起//还原当前位置pressedPosition = -1;//隐藏提示的Viewif (mSelectView!=null){mSelectView.setVisibility(View.GONE);}invalidate();//刷新break;}return true;}
}

MainActivity.java

package com.qf.sxy.customview02;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {private TextView tv;private LetterView letterView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = ((TextView) findViewById(R.id.select_tv));letterView = ((LetterView) findViewById(R.id.letterView));//传递展示的ViewletterView.setSelectTextView(tv);}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.qf.sxy.customview02.MainActivity"><com.qf.sxy.customview02.LetterView
        android:id="@+id/letterView"android:layout_width="40dp"android:layout_height="match_parent"android:layout_alignParentRight="true"/><TextView
        android:id="@+id/select_tv"android:layout_width="60dp"android:layout_height="60dp"android:layout_centerInParent="true"android:gravity="center"android:background="#00ff00"android:textSize="30sp"android:visibility="gone"android:text="A"/>
</RelativeLayout>

转载于:https://www.cnblogs.com/muyuge/p/6152165.html

28自定义View 模仿联系人字母侧栏相关推荐

  1. 自定义 View 之联系人字母索引及定位效果

    博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载.本文由博主 威威喵 原创,请多支持与指教. 本文首发于此   博主:威威喵  |  博客主页:https://blog.csdn.net/ ...

  2. android自定义view 模仿win10进度条

    android自定义view 模仿win10进度条 本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. PS:有朋友反映动画无法播放,那是因为PathMeasure ...

  3. android 开发打赏布局,Android自定义View模仿虎扑直播界面的打赏按钮功能

    Android自定义View模仿虎扑直播界面的打赏按钮功能 发布时间:2020-09-28 12:15:53 来源:脚本之家 阅读:77 作者:shenhuniurou 前言 作为一个资深篮球爱好者, ...

  4. Android自定义View——实现联系人列表字母索引

    相信大家对这个列表字母索引已经不陌生了,在很多app中也随处可见,像没团的城市地址选择,微信联系人列表,手机通讯录-等等.既然是个这么nb这么实用的功能我们怎么能不Get到来呢,下面就让我们一起造一个 ...

  5. 【Android 仿微信通讯录 导航分组列表-下】自定义View为RecyclerView打造右侧索引导航栏IndexBar

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请标明出处: http://blog.csdn.net/zxt0601/article/details/52420706 本文出 ...

  6. 自定义view - 收藏集 - 掘金

    Android 从 0 开始自定义控件之 View 的 draw 过程 (九) - Android - 掘金 转载请标明出处: http://blog.csdn.net/airsaid/... 本文出 ...

  7. Android自定义View——实现字母导航栏

    思路分析 1.自定义View实现字母导航栏 2.ListView实现联系人列表 3.字母导航栏滑动事件处理 4.字母导航栏与中间字母的联动 5.字母导航栏与ListView的联动 效果展示 实现步骤 ...

  8. android 自定义view,字母排序(仿微信好友列表)

    一:简言 一个月没有写博客了,公司项目比较忙,最近发现公司用到一个知识点,所以抽时间通过博客的形式分享给大家,该知识点,模仿微信的好友列表,通过字母索引进行定位,该功能主要通过几个知识点实现.下面会一 ...

  9. 使用Kotlin+RecyclerView+自定义View实现简易的通讯录字母导航功能

    之前实习的时候了解到小组内突然有一个需求,就是要把所有的用户列表都像微信和QQ的通讯录一样,很好的展示在界面上,当时因为忙于其他事,一直记住这个需求,但是没想着具体实现,现在闲下来,想到这个需求,看了 ...

最新文章

  1. Spring Cloud Alibaba基础教程:Nacos的集群部署
  2. win7如何配置access数据源
  3. 3.1.1_Spring如何加载和解析@Configuration标签
  4. C++程序设计(第2版)课后习题答案--第11章
  5. TypeError at /**/ ** missing 1 required positional argument: '**'
  6. 如何用Java解压缩WAR文件
  7. 数学建模与数学实验 (MATLAB)
  8. umijs多环境配置_项目实战-UmiJS开发(附带qiankun)
  9. js动态添加多个元素
  10. CTPN源码解析2-代码整体结构和框架
  11. 伽卡他卡学生端卸载方案
  12. 安卓手机分辨率修改工具的使用方法
  13. matlab初值微分方程,常微分方程初值问题的MATLAB解法
  14. On the Factory Floor: ML Engineering for Industrial-Scale Ads Recommendation Models笔记
  15. Mac Docker Desktop “Mounts denied: EOF.“解决方法
  16. 【netcat学习】学习使用网络工具中的瑞士军刀——NetCat
  17. php ckeditor 上传图片,CKEditor图片上传的PHP实现
  18. DV通配符证书申请方式及特点
  19. “火星自治”,马斯克这次是认真的吗?
  20. elasticsearch算法之推荐系统的相似度算法(一)

热门文章

  1. 进入Docker容器命令
  2. php错误提示如何查询,php-如何显示我的MySQLi查询错误?
  3. OpenCV 笔记(02)— 图像显示、保存、腐蚀、模糊、canny 边缘检测(imread、imshow、namedWindow、imwrite)
  4. 2017 年已读书单总结
  5. python 网络编程之Socket通信案例消息发送与接收
  6. ionic4中使用Swiper触屏滑动--技术
  7. 使用最新版(2020)IntelliJ IDEA 创建Servlet项目
  8. OpenArkCompiler方舟编译
  9. TensorFlow用法
  10. 英特尔 i5-9400F,或将成为本年最高性价比的游戏处理器