自定义View

  1. 自定义view的属性
  2. 在view的构造方法中获得我们自定义的属性
  3. 重写onMeasure
  4. 重写onDraw

  1. 自定义View的属性 res/values/新建.xml文件
    `









    `

  • string 字符串
  • color 颜色值,如#ffffff
  • dimension 尺寸,xml中设置为dp/dip, 字体为sp
  • integer 数值 1
  • enum 枚举类型
  • reference 引用,如@drawable/ic_launcher
  • float 浮点类型 如1.0
  • boolean 布尔类型 true或false
  • fraction 百分数 如100%
  • flag 位或运算
  1. 在布局中加入自定义的view
  2. 在View构造方法中,获得我们自定义的样式(重写三个构造方法)
    默认调用两个参数的构造方法,在三个参数的构造中获得自定义的属性,让所有的构造调用三个参数的那个。
    `
    public CustomTitleView(Context context, AttributeSet attrs, int defStyle)
    {
    super(context, attrs, defStyle);
    /**
    * 获得我们所定义的自定义样式属性
    */
    TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyTitleView, defStyle, 0);
    // 获取边界的宽度 mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_border_width, DEFAULT_BORDER_WIDTH);
    // 获取边界的颜色 mBorderColor = a.getColor(R.styleable.CircleImageView_border_color, DEFAULT_BORDER_COLOR);
    }

`
4.onMeasure()测量
自定义控件设置了wrap_content时,我们需要自己进行测量,即重写onMesure方法”
onMeasure()用于测量View的大小,View大小不仅由自身决定,也受父控件的影响,重写MeasureSpec的specMode,一共三种类型:
EXACTLY:一般是设置了明确的值或者是MATCH_PARENT
layout="30dp"
AT_MOST:表示子布局限制在一个最大值内,一般为WARP_CONTENT
UNSPECIFIED:表示子布局想要多大就多大,很少使用

5.重写onDraw()绘制我们的视图

你可能感兴趣的:(自定义View)