自定义view 随机数
来源:互联网 发布:mac大脚插件是什么 编辑:程序博客网 时间:2024/06/03 21:21
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.bwie.test.lianxiview.MainActivity"> <com.bwie.test.lianxiview.MyYanZheng android:layout_width="wrap_content" android:layout_height="wrap_content" /> <com.bwie.test.lianxiview.MyYanZheng android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="58dp" android:layout_below="@+id/myYanZheng" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /></RelativeLayout>
attars
package com.bwie.test.lianxiview;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.util.AttributeSet;import android.view.View;/** * Created by 景瑾 on 2017/9/28. */public class MyYanZheng extends View { private Paint codePaint; private Paint rectPaint; private String data = "1234"; private Rect rectString; public MyYanZheng(Context context) { super(context); } public MyYanZheng(Context context, AttributeSet attrs) { super(context, attrs); //初始化 init(); //设置监听,点击一次就重新生成一次验证码 this.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { data = getRandom2(); //重新绘制,让点击前的重置为无效 invalidate(); } }); } public MyYanZheng(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes, Rect rectString, Paint codePaint, Paint rectPaint, String data) { super(context, attrs, defStyleAttr, defStyleRes); this.rectString = rectString; this.codePaint = codePaint; this.rectPaint = rectPaint; this.data = data; } //初始化画笔 private void init() { //设置生成代码的画笔的属性 codePaint = new Paint(); codePaint.setColor(Color.RED); codePaint.setStrokeWidth(10); codePaint.setTextSize(80); //设置矩形画笔属性 rectPaint = new Paint(); //rectPaint.setStyle(Paint.Style.STROKE);//空心风格 rectPaint.setColor(Color.GREEN); rectPaint.setStrokeWidth(15); //通过一个矩形将绘制文字包裹在里面,那么你的控件大小就转换成矩形的大小 rectString = new Rect(); /** * 1,字符串内容 2,字符串起点 3,字符串长度 4,空矩形 */ codePaint.getTextBounds(data, 0, data.length(), rectString); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //记住显示的顺序不要写反了,否则图层覆盖,影响显示 //画矩形 canvas.drawRect(0, 0, getWidth(), getHeight(), rectPaint); //画验证码 canvas.drawText(data, 0, getHeight(), codePaint); } //生成四位随机数的方法一// public String getRandom() {// Random random = new Random();// Set<Integer> set = new HashSet<>();// 循环注意终止条件是set.size()<4// for (int i = 0; set.size() < 4; i++) {// int value = random.nextInt(10);// set.add(value);// }// //将生成的验证码装载stringbuffer里面// StringBuffer stringBuffer = new StringBuffer();// for (Integer i : set) {// stringBuffer.append(i);// }// return stringBuffer.toString();// } //生成四位随机数的方法二(弊端:只能生成>1000的数字,如0069此法无法生成) public String getRandom2() { //(int) (Math.random() * (大数 - 小数 + 1) + 小数) String codeStr = (int) (Math.random() * (9999 - 1000 + 1) + 1000) + ""; return codeStr; } /** * 当设置wrap_content属性的时候,系统测量的不准确你需重新计算 * MeasureSpec这个类可以帮助我们进行计算和获取当前在布局里面设置的模式 * At_most-------wrap_content * Exactly-------match_parent,或者固定尺寸,如100dp; * At_most通常计算不准确,需要自己计算 */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // super.onMeasure(widthMeasureSpec, heightMeasureSpec); //获取当前宽度设置模式 int widthMode = MeasureSpec.getMode(widthMeasureSpec); //获取宽度参考值,下面高度同理分别获取 int widthCK = MeasureSpec.getSize(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int heightCK = MeasureSpec.getSize(heightMeasureSpec); int width, height; if (widthMode == MeasureSpec.EXACTLY) { //如果精确测量模式,直接赋值 width = widthCK; } else { //如果不是精确测量模式,取字符串的宽度来赋值 width = rectString.width(); } if (heightMode == MeasureSpec.EXACTLY) { height = heightCK; } else { height = rectString.height(); } //重新设置计算的值 setMeasuredDimension(width, height); }}
阅读全文
0 0
- 自定义View实现随机数
- 自定义view变换随机数
- 自定义view 生成随机数
- 自定义view 随机数
- 【Android自定义View】随机数按钮
- 自定义View+随机数点击变化
- 自定义View+点击生成随机数
- 自定义view点击生成随机数
- 自定义View点击生成随机数
- 自定义view随机数点击事件
- 自定义view圆形之生成随机数改变
- 自定义view,绘制四位随机数
- 自定义View之点击生成随机数
- 自定义view,点击更换背景色与随机数
- 自定义view
- 自定义View
- 自定义view
- 自定义View
- 10秒之后的协议同意
- 控制器异常
- HTTP请求简述
- flume通过公网ip采集到hdfs上
- 自定义view实现圆形加载
- 自定义view 随机数
- angularjs -返回顶部
- android项目开发中常用套路
- TLD算法的相关研究(2)
- scala学习-11-package object
- 自定义View之点击生成随机数
- 刮刮乐(自制)
- 将Dynamic Web projec转换Maven Project
- java基础学习总结——关于Java中的paint,repaint,update三个方法的关系