android 自定义view初级
来源:互联网 发布:教师个人网络研修计划 编辑:程序博客网 时间:2024/05/24 06:31
android自定义view简单流程
①首先自定义view的属性,在res/values/下建立一个xml文件,在里面定义我们的属性和声明我们的样式
例子:
<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>
在这里我们定义了字体,颜色,字体大小,format是指该属性的取值类型:
一共有:string,color,demension,integer,enum,reference,float,boolean,fraction,flag
②接下来我们要在布局中声明我们自定义的View
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:custom="http://schemas.android.com/apk/res/com.example.customview01"
android:layout_width="match_parent"
- android:layout_height="match_parent" >
<com.example.customview.view.CustomTitleView //包名加上自定义的名字
android:layout_width="200dp"
android:layout_height="100dp"
custom:titleText="3712"
custom:titleTextColor="#ff0000"
custom:titleTextSize="40sp" />
一定要引入 xmlns:custom="http://schemas.android.com/apk/res/com.example.customview01
③在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转化为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);
- }
重写了3个构造方法,默认的布局文件调用的是两个参数的构造方法,所以记得让所有的构造调用我们的三个参数的构造,
我们在三个参数的构造中获得自定义属性。
④我们重写onDraw,onMesure调用系统提供的:
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
- {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- }
- @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初级自定义View
- android 自定义view初级
- Android自定义view(初级篇)
- 自定义View初级
- Android初级进阶之自定义View之SafeVeiw
- 自定义view的初级记录
- Android View---自定义View
- Android View---自定义View
- android初级学习之视图的绘制(自定义View的实现原理)
- Android使用自定义属性初级
- Android 自定义View 之 自定义View属性
- 【自定义View系列】android自定义View概述
- Android自定义view自定义属性
- Android自定义控件 -- 自定义View
- android自定义view(自定义数字键盘)
- Android自定义View-自定义属性
- Android自定义View-自定义属性
- Android 自定义View
- 定义异常处理时,什么时候定义try,什么时候定义throws呢?
- CNN经典网络模型摘要--AlexNet、ZFnet、GoogleNet、VGG、ResNet
- jetson tx1使用记录
- Hibernate与 MyBatis的比较
- [编程题]放苹果
- android 自定义view初级
- 记录一次无法远程桌面连接问题
- iOS侧边栏菜单控制器:CDSideBarController
- 前端性能优化
- 在eclipse中怎么看JSP页面图形
- 【Linux】Subversion/SVN学习笔记2
- Retrofit的简单封装
- 20170323STL06_STL_SGI_vector
- win10上 安装Sqlserver2008R2数据库提示.NET Framework3.5不存在,解决之后仍然提示兼容问题安装不成功