我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何在Android利用View模仿一个微信的LetterView效果

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何在Android利用View模仿一个微信的LetterView效果

如何在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);        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);          invalidate();    }  }    @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;  }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何在Android利用View模仿一个微信的LetterView效果

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何在Android利用View模仿一个微信的LetterView效果

如何在Android利用View模仿一个微信的LetterView效果?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体代码如下所示: public class LetterV
2023-05-31

怎么在Android中利用Fragment模仿一个微信界面

本篇文章为大家展示了怎么在Android中利用Fragment模仿一个微信界面,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。什么是Fragment  自从Android 3.0中引入fragment
2023-05-30

如何在Android中利用ConstraintLayout实现一个动画效果

这篇文章将为大家详细讲解有关如何在Android中利用ConstraintLayout实现一个动画效果,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。xml布局: