当前位置: 代码迷 >> 综合 >> Android 自定义View 开发 入门与实践7
  详细解决方案

Android 自定义View 开发 入门与实践7

热度:81   发布时间:2024-02-06 06:24:42.0

自定义View 之设置自定义属性attr

在Values下面创建一个attr.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources><declare-styleable name="BounceScrollView"><attr name="damping" format="float" /><attr name="scrollOrientation" format="enum"><enum name="vertical" value="0" /><enum name="horizontal" value="1" /></attr><attr name="incrementalDamping" format="boolean" /><attr name="bounceDelay" format="integer" /><attr name="triggerOverScrollThreshold" format="integer" /><attr name="disableBounce" format="boolean" /><attr name="nestedScrollingEnabled" format="boolean" /></declare-styleable><declare-styleable name="AutoPlayRecyclerView"><attr name="timeInterval" format="integer" /><attr name="direction" format="enum"><enum name="left" value="1" /><enum name="right" value="2" /></attr></declare-styleable></resources>

解释一下format对应的值:

"reference":某一资源id

"color":颜色值

"boolean":布尔值

"dimen":尺寸值

"float":浮点值

"integer":整型值

"string":字符串

"fraction":百分数

"enum":枚举值

"flag":位或运算


ViewGroup绘制流程

注意:View 及ViewGroup基本相同,只是在ViewGroup中不仅要绘制自己,还要绘制其中的子控件,而View 只要绘制自己就可以了

    绘制流程分为三步:测量,布局,绘制,分别对应onMeasure(),onLayout(),onDraw()

onMeasure():测量当前控件的大小,为正式布局提供建议(只是建议,用不用还要看onLayout()函数)

   主要是setMeasuredDimension(宽,高)设置

   三个mode

   Unspecified(未指定):父元素不对子元素施加任何束缚,子元素可以得到任意想要的大小

   Exactly (完全):父元素 决定子元素的确切大小,子元素将被限定在给定的边界里而忽略他本身的大小

   At_most(至多):子元素至多达到指定大小的值

模式提取:

int mode = MeasureSpec.getMode(widthMeasureSpec);if(mode == MeasureSpec.UNSPECIFIED){ }if(mode == MeasureSpec.EXACTLY){ }if(mode == MeasureSpec.AT_MOST){ }

获取 宽高

 int measureWidth = MeasureSpec.getSize(widthMeasureSpec);int measureHeight = MeasureSpec.getSize(heightMeasureSpec);

onLayout(): 使用layout()函数对所有子控件进行布局

onDraw():根据布局的位置绘图


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  相关解决方案