android自定义view之刷新验证码
来源:互联网 发布:讲文明知礼仪主题班会 编辑:程序博客网 时间:2024/06/10 07:22
今天大家和分享下登入时候经常遇到的问题,这边只是个模型:
首先自定义view来onMeasue 作为存放验证码的地方,重写的view需要重写onDrawn和onMeasue 2个方法。
onMeasue 这个方法是用来测量长宽:
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec);// EXACTLY:一般是设置了明确的值或者是MATCH_PARENT// AT_MOST:表示子布局限制在一个最大值内,一般为WARP_CONTENT int widthMode=MeasureSpec.getMode(widthMeasureSpec); int widthSize=MeasureSpec.getSize(widthMeasureSpec); int heightMode=MeasureSpec.getMode(heightMeasureSpec); int heigtSize=MeasureSpec.getSize(heightMeasureSpec); int width; int height; if(widthMode==MeasureSpec.EXACTLY){ width=widthSize; } else{ mPaint.setTextSize(mTittleSize); mPaint.getTextBounds(mTitleName,0,mTitleName.length(),mRect); float texWidth=mRect.width(); int desired=(int)(getPaddingLeft()+texWidth+getPaddingRight()); width=desired; } if(heightMode==MeasureSpec.EXACTLY){ height=heigtSize; } else{ mPaint.setTextSize(mTittleSize); mPaint.getTextBounds(mTitleName,0,mTitleName.length(),mRect); float texHeight=mRect.height(); int desired=(int)(getPaddingLeft()+texHeight+getPaddingRight()); height=desired; } setMeasuredDimension(width, height); }
至于onDraw是画图用的:
@Overrideprotected void onDraw(Canvas canvas) { mPaint.setColor(getResources().getColor(R.color.colorPrimary)); canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(),mPaint); mPaint.setColor(mTitleColor); canvas.drawText(mTitleName, getWidth() / 2 - mRect.width() / 2, getHeight() / 2 + mRect.height() / 2, mPaint);}
再次确定布局文件:
其中值得注意的是,
xmlns:custom="http://schemas.android.com/apk/res-auto"
这个是适应android studio的,在eclipse不是这样写的。
<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"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <EditText android:id="@+id/et_number" android:layout_weight="4" android:layout_width="0dp" android:layout_height="wrap_content" android:hint="请输入验证码"/> <com.example.john.customviewtitle.CustomTitleView android:layout_weight="1" android:id="@+id/tv_custom" android:layout_width="0dp" android:layout_height="wrap_content" custom:titleSize="16sp" custom:titleName="12345" android:padding="10dp" android:layout_centerHorizontal="true" android:layout_centerInParent="true" custom:titlleColor="#ff0000"/> </LinearLayout> <Button android:id="@+id/btn_submit" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="点击验证"/></LinearLayout>
attrs.xml中的文件:
<?xml version="1.0" encoding="utf-8"?><resources> <attr name="titleName" format="string"/> <attr name="titlleColor" format="color"/> <attr name="titleSize" format="dimension"/> <declare-styleable name="CustomTitleView"> <attr name="titleName"/> <attr name="titlleColor"/> <attr name="titleSize"/> </declare-styleable></resources>
至于activity中的代码就相对简单多了:
mCustomView.setmBack(new CustomTitleView.CallBack() { @Override public void onCBack(String numbers) { number=numbers; }});mBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(mEt.getText().toString().equals(number)){ Toast.makeText(MainActivity.this,"验证通过!",Toast.LENGTH_LONG).show(); } else { Toast.makeText(MainActivity.this,"验证失败!",Toast.LENGTH_LONG).show(); } }});
一个简单的回调而已。
各位抱歉,表达能力有缺陷,如有需要的请查看源码。
http://download.csdn.net/detail/u013651405/9464444
0 0
- android自定义view之刷新验证码
- Android 自定义View (验证码)
- Android 自定义View之随机生成图片验证码
- 【Android自定义View实战】之获取验证码倒计时按钮
- Android自定义View入门之简单验证码控件
- Android 自定义View之随机生成图片验证码
- Android 自定义View之正方形验证码输入框
- 自定义View之圆环刷新
- 自定义View初学笔记之验证码
- 自定义View学习之验证码
- android自定义view的刷新
- Android 自定义万能刷新View
- Android自定义View--验证码控件
- Android自定义View(一)(验证码)
- Android自定义View实现验证码
- android 自定义View生成验证码
- android自定义验证码倒计时View
- Android自定义View实现随机验证码
- 开篇
- 基于Android的ELF PLT/GOT符号重定向过程
- FFmpeg深入分析之零-基础
- oracle中exp,imp的使用详解
- android 二维码 helloworld (二维码的生成与扫描)
- android自定义view之刷新验证码
- Bootstrap 进度条
- android 图片缓存LruCache
- QDesktopServices::openUrl来打开网页
- Java中的字符串
- JavaScript Window - 浏览器对象模型
- 关于ffmpeg的安装详细步骤和说明
- @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
- 设计模式第七堂课