最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Android自定义View仿微信LetterView效果
时间:2017-05-18 编辑:简简单单 来源:一聚教程网
代码如下 | 复制代码 |
publicclassLetterViewextendsView { privateString TAG = LetterView.class.getSimpleName(); //A,B,C....Z,# publicList privatePaint mPaint; privateintselectPosition = -1; privateTextView mLetter; publicvoidsetmLetter(TextView mLetter) { this.mLetter = mLetter; } publicLetterView(Context context) { this(context,null); } publicLetterView(Context context, AttributeSet attrs) { this(context, attrs,0); } publicLetterView(Context context, AttributeSet attrs,intdefStyleAttr) { super(context, attrs, defStyleAttr); //生产字母 letters =newArrayList<>(); for(inti =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 =newPaint(); mPaint.setAntiAlias(true); mPaint.setColor(Color.BLUE); mPaint.setTextSize(30); } @Override protectedvoidonDraw(Canvas canvas) { super.onDraw(canvas); /** * 获取View的宽度 * 获取View的高度 */ intwidth = getMeasuredWidth(); intheight = getMeasuredHeight(); //测量字的宽度 intsize = letters.size(); for(inti =0; i < size; i++) { floattextWidth = mPaint.measureText(letters.get(i)); intsingleHeight = 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 publicbooleanonTouchEvent(MotionEvent event) { //包装了动作,位置信息 // event.getY();//相对于View本身的坐标值 // event.getRawY();//返回的是相对于屏幕的坐标值 floaty = event.getY(); Log.e(TAG,"onTouchEvent: Y:"+ y); // Log.e(TAG, "onTouchEvent: RawY:"+event.getRawY() ); intmeasuredHeight = getMeasuredHeight(); intsingleHeight = measuredHeight / letters.size(); intposition = (int) (y / singleHeight); Log.e(TAG,"onTouchEvent: "+ position ); switch(event.getAction()) { caseMotionEvent.ACTION_MOVE: Log.e(TAG,"onTouchEvent: ACTION_MOVE"); caseMotionEvent.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; caseMotionEvent.ACTION_UP: Log.e(TAG,"onTouchEvent: ACTION_UP"); selectPosition = -1; if(mLetter !=null) { mLetter.setVisibility(View.GONE); } break; } //返回true代表事件被处理了 returntrue; } } |
相关文章
- sora软件价格介绍 02-22
- sora官网入口地址一览 02-22
- Sora生成的视频使用教程 02-22
- 《梦幻西游》元宵灯谜线索答案大全2024 02-22
- 《原神》有朋自远方来第一天通关攻略 02-22
- 《苏醒之路》四个结局达成攻略 02-22