全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android自定义View仿微信LetterView效果

废话不多说了,具体代码如下所示:

 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小时内与您取得联系。