美文网首页
自定义View

自定义View

作者: lwwlsky | 来源:发表于2016-06-07 17:17 被阅读40次
    1. 自定义view的属性
    2. 在view的构造方法中获得我们自定义的属性
    3. 重写onMeasure
    4. 重写onDraw

    1. 自定义View的属性 res/values/新建.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="MyTitleView">
      <attr name="titleText" />
      <attr name="titleTextColor" />
      <attr name="titleTextSize" />
      <attr name="borderWidth" format="dimension">
      </declare-styleable>
      </resources> `

    • 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

          本文链接:https://www.haomeiwen.com/subject/okwddttx.html