自定义控件(一),点击文本变换数字
来源:互联网 发布:新版知乎如何添加回答 编辑:程序博客网 时间:2024/06/15 08:36
package com.example.customview01.view;import java.util.HashSet;import java.util.Random;import java.util.Set;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 com.example.customview01.R;public class CustomTitleView extends View{/** * 文本 */private String mTitleText;/** * 文本的颜色 */private int mTitleTextColor;/** * 文本的大小 */private int mTitleTextSize;/** * 绘制时控制文本绘制的范围 */private Rect mBound;private Paint mPaint;public CustomTitleView(Context context, AttributeSet attrs){this(context, attrs, 0);}public CustomTitleView(Context context){this(context, null);}/** * 获得我自定义的样式属性 * * @param context * @param attrs * @param defStyle */public CustomTitleView(Context context, AttributeSet attrs, int defStyle){super(context, attrs, defStyle);/** * 获得我们所定义的自定义样式属性 */TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomTitleView, defStyle, 0);int n = a.getIndexCount();for (int i = 0; i < n; i++){int attr = a.getIndex(i);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转化为pxmTitleTextSize = 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);this.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){mTitleText = randomText();postInvalidate();}});}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();}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){// super.onMeasure(widthMeasureSpec, heightMeasureSpec);int width = 0;int height = 0;/** * 设置宽度 */int specMode = MeasureSpec.getMode(widthMeasureSpec);int specSize = MeasureSpec.getSize(widthMeasureSpec);switch (specMode){case MeasureSpec.EXACTLY:// 明确指定了width = getPaddingLeft() + getPaddingRight() + specSize;break;case MeasureSpec.AT_MOST:// 一般为WARP_CONTENTwidth = getPaddingLeft() + getPaddingRight() + mBound.width();break;}/** * 设置高度 */specMode = MeasureSpec.getMode(heightMeasureSpec);specSize = MeasureSpec.getSize(heightMeasureSpec);switch (specMode){case MeasureSpec.EXACTLY:// 明确指定了height = getPaddingTop() + getPaddingBottom() + specSize;break;case MeasureSpec.AT_MOST:// 一般为WARP_CONTENTheight = getPaddingTop() + getPaddingBottom() + mBound.height();break;}setMeasuredDimension(width, height);}@Overrideprotected 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);}}
0 0
- 自定义控件(一),点击文本变换数字
- 自定义view实现数字点击变换功能
- Android自定义控件(特效一) 点击屏幕,根据所点击的位置绘制圆环
- Android自定义控件(特效一) 点击屏幕,根据所点击的位置绘制圆环
- 数字文本控件
- 自定义view(一 <文本>)
- qt4下实现自定义槽---点击按钮数字加一
- 自定义控件(一)
- 自定义控件(一)
- 自定义控件(一)
- 自定义控件(一)
- 自定义控件(一)
- 自定义控件(一)
- 自定义控件(一)
- 自定义控件(一)
- 自定义控件(一)
- 自定义控件(一)
- 自定义控件(一)
- 使用Eclipse编译运行MapReduce程序 Hadoop2.6.0_Ubuntu/CentOS
- 我们身处的谎言世界
- xcode 快捷键小结
- Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04
- [Linux]O_CLOEXEC 标志
- 自定义控件(一),点击文本变换数字
- PHP界面显示中文乱码
- 数据的存储方式:plist、归档、用户偏好设置
- 不同Activity的数据传递(Bundle的使用)
- 浙大PAT 1058
- Spark快速入门指南 – Spark安装与基础使用
- The Dominant Color (20)
- LeetCode OJ 4.Median of Two Sorted Arrays
- C语言实现双向非循环链表(不带头结点)的清空