如何在Android利用View模仿一个微信的LetterView效果
短信预约 -IT技能 免费直播动态提醒
如何在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布局: