自定义View(类似验证码)
来源:互联网 发布:蜀美网络招聘信息 编辑:程序博客网 时间:2024/06/08 02:02
在res/valus目录下新建一个attrs的xml文件
<?xml version="1.0" encoding="utf-8"?><resources> <attr name="titleText" format="string"/> <attr name="titleTextColor" format="color"/> <attr name="titleTextSize" format="dimension"/> <declare-styleable name="CustomTitleView"> <attr name="titleText"/> <attr name="titleTextColor"/> <attr name="titleTextSize"/> </declare-styleable>新建一个类去继承view
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.Log;import android.util.TypedValue;import android.view.View;import java.util.HashSet;import java.util.Random;import java.util.Set;/** * Created by Administrator on 2016/8/9. */public class mView extends View { /** * 文本 */ private String mTitleText; /** * 文本的颜色 */ private int mTitleTextColor; /** * 文本的大小 */ private int mTitleTextSize; /** * 绘制时控制文本绘制的范围 */ private Rect mBound; private Paint mPaint; public mView(Context context) { this(context, null); } private String randomText(){ 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(); } public mView(Context context, AttributeSet attrs) { this(context, attrs, 0); this.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mTitleText = randomText(); postInvalidate(); } }); } /** * 获得我自定义的样式属性 * * @param context * @param attrs * @param */ public mView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); /** * 获得我们所定义的自定义样式属性 */ TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomTitleView, defStyleAttr, 0); int n = a.getIndexCount(); Log.d("mView", "n" + n); for (int i = 0; i < n; i++) { int attr = a.getIndex(i); Log.d("mView", "attr:" + attr); switch (attr) { case R.styleable.CustomTitleView_titleText: mTitleText = a.getString(attr); break; case R.styleable.CustomTitleView_titleTextColor: // 默认颜色设置为黑色 mTitleTextColor = a.getColor(attr, Color.BLACK); break; case R.styleable.CustomTitleView_titleTextSize: // 默认设置为16sp,TypeValue也可以把sp转化为px mTitleTextSize = a.getDimensionPixelSize(attr, (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_SP, 16, getResources().getDisplayMetrics())); break; } } a.recycle(); /** * 获得绘制文本的宽和高 */ mPaint = new Paint(); mPaint.setTextSize(mTitleTextSize); mPaint.setColor(mTitleTextColor); mBound = new Rect(); mPaint.getTextBounds(mTitleText, 0, mTitleText.length(), mBound); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mPaint.setColor(Color.RED); canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), mPaint); mPaint.setColor(Color.GRAY); canvas.drawText(mTitleText, getWidth() / 2 - mBound.width() / 2, getHeight() / 2 + mBound.height() / 2, mPaint); }}直接运用在布局中
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:custom="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"><com.example.administrator.myview.mView android:layout_width="200dp" android:layout_height="100dp" custom:titleText="3712" android:padding="10dp" custom:titleTextColor="#ff0000" android:layout_gravity="center" custom:titleTextSize="40sp" /></LinearLayout>效果图
0 0
- 自定义View(类似验证码)
- Android自定义View(一)(验证码)
- 自定义view(一)--随机验证码
- 自定义View-输入验证码
- Android 自定义View (验证码)
- 自定义view之一:自定义验证码控件
- Android:自定义View(随机生成验证码)
- android自定义view(一),打造绚丽的验证码
- 自定义View实现验证码效果
- Android自定义View--验证码控件
- Android自定义View实现验证码
- android 自定义View生成验证码
- android自定义view之刷新验证码
- android自定义验证码倒计时View
- Android自定义View实现随机验证码
- Android发送验证码倒计时自定义View
- 自定义View初学笔记之验证码
- Android 自定义view - 随机验证码
- 深入map和set
- 快速原型工具 mockups和墨刀还有axure
- Apache kylin开发环境搭建
- 自定义注解之编译时注解(RetentionPolicy.CLASS)(三)—— 常用接口介绍
- Linux From Scratch(介绍)
- 自定义View(类似验证码)
- 为什么不能同时满足CAP原则
- 每周2要有一个提醒,程序内怎么实现
- oracle创建用户和表空间
- 常用的hibernate泛型dao
- Spring InitializingBean和init-method
- JDK,JRE,JVM区别与联系
- 美团多渠道打包原理以及使用
- Django(1)--window环境安装Django