自定义view实现数字点击变换功能
2017-10-06 10:06
225 查看
package com.bwie.chentong.rikao0928; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.util.TypedValue; import android.view.View; import java.util.HashSet; import java.util.Random; import java.util.Set; public class MyTextView extends View{ private String mTitleText; private int mTitleTextColor; private int mTitleTextSize; /** * 画笔 */ private Paint mPaint; /** * view的矩形背景 */ private Rect mBound; public MyTextView(Context context) { this(context,null); } public MyTextView(Context context, AttributeSet attrs) { this(context, attrs,0); } public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyTextView, defStyleAttr, 0); mTitleText = randomText(); //初始化显示的数字 for (int i = 0; i < a.getIndexCount(); i++) { int attr = a.getIndex(i); switch (attr) { case R.styleable.MyTextView_titleText: mTitleText = a.getString(attr); break; case R.styleable.MyTextView_titleTextColor: mTitleTextColor = a.getColor(attr, Color.BLACK); break; case R.styleable.MyTextView_titleTextSize: //设置默认大小为16 mTitleTextSize = a.getDimensionPixelSize(attr, (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_SP, 16, getResources().getDisplayMetrics())); break; } } //将TypedArray对象回收 a.recycle(); /** * 初始化画笔 */ mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setTextSize(mTitleTextSize); mPaint.setColor(mTitleTextColor); mBound = new Rect(); mPaint.getTextBounds(mTitleText, 0, mTitleText.length(), mBound); /** * 模仿点击换验证码 */ this.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { mTitleText = randomText(); postInvalidate(); } }); } /** * 获取四位随机数验证码 * * @return */ private String random 4000 Text() { Random random = new Random(); Set<Integer> set = new HashSet<Integer>(); while (set.size() < 4) { int randomInt = random.nextInt(10); set.add(randomInt); } StringBuffer sb = new StringBuffer(); for (Integer i : set) { sb.append("" + i); } return sb.toString(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { /** * 处理当宽高都是wrap_content的情况 */ int widthMode = MeasureSpec.getMode(widthMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); int width = 0; int height = 0; if (widthMode == MeasureSpec.EXACTLY) { width = widthSize; } else { mPaint.setTextSize(mTitleTextSize); mPaint.getTextBounds(mTitleText, 0, mTitleText.length(), mBound); float textWidth = mBound.width(); int desired = (int) (getPaddingLeft() + textWidth + getPaddingRight()); width = desired; } if (heightMode == MeasureSpec.EXACTLY) { height = heightSize; } else { mPaint.setTextSize(mTitleTextSize); mPaint.getTextBounds(mTitleText, 0, mTitleText.length(), mBound); float textWidth = mBound.height(); int desired = (int) (getPaddingTop() + textWidth + getPaddingBottom()); height = desired; } setMeasuredDimension(width, height); } @Override protected void onDraw(Canvas canvas) { /** * 绘制文字和矩形 */ mPaint.setColor(Color.YELLOW); canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), mPaint); mPaint.setColor(mTitleTextColor); canvas.drawText(mTitleText, getWidth() / 2 - mBound.width() / 2, getHeight() / 2 + mBound.height() / 2, mPaint); } }
相关文章推荐
- Android开发 自定义ViewGroup 实现微信九格图功能(图片不同排布不同) 和 一种图片点击变暗效果
- 自定义view实现录音功能,圆形进度条
- Android自定义View 实现闹钟唤起播放闹钟铃声功能
- 自定义一个view,并实现最简单的手势识别功能(下)
- Android使用RecyclerView实现自定义列表、点击事件以及下拉刷新
- Android自定义SurfaceView——实现画板功能
- android 自定义TextView支持微博功能后在ListView占用了Item点击的解决办法
- 自定义View实现倒计时功能
- android TextView 实现自定义文字点击效果
- TextView实现超链接并自定义点击效果
- 自定义view模板,实现点击事件的回调
- 自定义View实现自动数字增长的TextView
- android 自定义view实现自动相册功能
- iOS每日一记————————简单的实现委托 Block代码块 功能 和简单的自定义View
- 自定义Button之实现点击按钮实现倒计时功能
- 自定义View实现擦除蒙版显示图片功能/自定义View的存储/自定义View的属性
- 自定义view实现圆环功能
- Android实现RecyclerView自定义列表、点击事件以及下拉刷新
- Android自定义View之快速实现下拉刷新, 点击加载更多ListView
- Vue.js自定义下拉列表,如何实现在下拉列表区域外点击即可关闭下拉列表的功能