http://blog.csdn.net/zjh_1110120/article/details/50976027

1.attr format 取值类型

以ShapeView 为例

<declare-styleable name="ShapeViewStyle">
<attr name="viewWidth" format="dimension|reference"/>
<attr name="viewHeight" format="dimension|reference"/>
<attr name="viewColor" format="color|reference"/> <attr name="viewShape" format="enum">
<enum name="rect" value=""/>
<enum name="oval" value=""/>
<enum name="line" value=""/>
</attr> <attr name="lineWidth" format="dimension|reference"/>
<attr name="lineDashWidth" format="dimension|reference"/>
<attr name="lineDashGap" format="dimension|reference"/>
</declare-styleable>
<com.example.administrator.llab.view.ShapeView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight=""
app:viewColor="@color/red"
app:viewHeight="50dp"
app:viewShape="oval"
app:viewWidth="50dp"/>

TypedArray 详解

http://blog.csdn.net/zjh_1110120/article/details/50986589

大体意思是:TypedArray 是一个数组容器,在这个容器中装由 obtainStyledAttributes(AttributeSet, int[], int, int) 或者 obtainAttributes(AttributeSet, int[]) 函数获取到的属性值。用完之后记得调用 recycle() 函数回收资源。索引值用来获取 Attributes 对应的属性值(这个 Attributes 将会被传入 obtainStyledAttributes() 函数)。

private void init(Context context, AttributeSet attrs, int defStyleAttr) {
this.mContext = context; TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.ShapeViewStyle, defStyleAttr, ); viewWidth = (int) typedArray.getDimension(R.styleable.ShapeViewStyle_viewWidth, viewWidth);
viewHeight = (int) typedArray.getDimension(R.styleable.ShapeViewStyle_viewHeight, viewHeight);
viewColor = typedArray.getColor(R.styleable.ShapeViewStyle_viewColor, viewColor); lineWidth = (int) typedArray.getDimension(R.styleable.ShapeViewStyle_lineWidth, lineWidth);
lineDashWidth = (int) typedArray.getDimension(R.styleable.ShapeViewStyle_lineDashWidth, lineDashWidth);
lineDashGap = (int) typedArray.getDimension(R.styleable.ShapeViewStyle_lineDashGap, lineDashGap); int shape = typedArray.getInt(R.styleable.ShapeViewStyle_viewShape, Shape.rect.ordinal());
for (Shape shapeValue: Shape.values()) {
if (shapeValue.ordinal() == shape) {
viewShape = shapeValue;
break;
}
} setImageDrawable(createShapeView());
}
private LayerDrawable createShapeView() {
GradientDrawable gradientDrawable = new GradientDrawable();
gradientDrawable.setColor(viewColor);
gradientDrawable.setSize(viewWidth, viewHeight); switch (viewShape) {
case rect:
gradientDrawable.setShape(GradientDrawable.RECTANGLE);
break;
case oval:
gradientDrawable.setShape(GradientDrawable.OVAL);
break;
case line:
gradientDrawable.setShape(GradientDrawable.LINE);
gradientDrawable.setStroke(lineWidth, viewColor, lineDashWidth, lineDashGap);
break;
}
return new LayerDrawable(new Drawable[]{gradientDrawable});
}

Android - 自定义控件和属性(attr和TypedArray)的更多相关文章

  1. Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用

    一. 在res/values 文件下定义一个attrs.xml 文件.代码如下: <?xml version="1.0" encoding="utf-8" ...

  2. android自定义控件(3)-自定义当前按钮属性

    那么还是针对我们之前写的自定义控件:开关按钮为例来说,在之前的基础上,我们来看看有哪些属性是可以自定义的:按钮的背景图片,按钮的滑块图片,和按钮的状态(是开还是关),实际上都应该是可以在xml文件中直 ...

  3. android自定义控件(1)-自定义控件属性

    那么还是针对我们之前写的自定义控件:开关按钮为例来说,在之前的基础上,我们来看看有哪些属性是可以自定义的:按钮的背景图片,按钮的滑块图片,和按钮的状态(是开还是关),实际上都应该是可以在xml文件中直 ...

  4. Android自定义控件之自定义组合控件

    前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...

  5. Android自定义控件之自定义属性

    前言: 上篇介绍了自定义控件的基本要求以及绘制的基本原理,本篇文章主要介绍如何给自定义控件自定义一些属性.本篇文章将继续以上篇文章自定义圆形百分比为例进行讲解.有关原理知识请参考Android自定义控 ...

  6. Android自定义控件1

    概述 Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了.自定义控件对于初学者总是感觉是一种复杂的技术.因为里面涉及到的知识点会 ...

  7. 一起来学习Android自定义控件1

    概述 Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了.自定义控件对于初学者总是感觉是一种复杂的技术.因为里面涉及到的知识点会 ...

  8. Android自定义控件系列之应用篇——圆形进度条

    一.概述 在上一篇博文中,我们给大家介绍了Android自定义控件系列的基础篇.链接:http://www.cnblogs.com/jerehedu/p/4360066.html 这一篇博文中,我们将 ...

  9. Android自定义控件总结

    自定义控件分类: 1.使用系统控件,实现自定义的效果 2.自己定义一个类继承View ,如textView.ImageView等,通过重写相关的方法来实现新的效果 3.自己定义一个类继承ViewGro ...

随机推荐

  1. 【bug】VUE:Cannot read property '_withTask' of undefined

    如题 成因:极大可能是template上有某个函数,没有在 methods中声明导致的. 解决:找到那个未声明的函数名,写在methods中.你可以使用二分法快速找到.

  2. SQL高效查询两个表不同的数据

    逻辑相对复杂,但是速度最快: )

  3. 05-创建kubectl-kubeconfig文件

    本文档介绍创建 kubeconfig 文件 下载 kubectl $ wget https://dl.k8s.io/v1.6.0/kubernetes-client-linux-amd64.tar.g ...

  4. POJ 2726

    #include <iostream> #include <algorithm> #define MAXN 10005 using namespace std; struct ...

  5. Alpha冲刺(3/10)——追光的人

    1.队友信息 队员学号 队员博客 221600219 小墨 https://www.cnblogs.com/hengyumo/ 221600240 真·大能猫 https://www.cnblogs. ...

  6. Oracle 11g安装时针对不同操作系统所需的依赖包查询地址

    http://docs.oracle.com/cd/E11882_01/install.112/e24326/  点击连接,出现页面,往下滑动:)

  7. 线程中的同步辅助类CountDownLatch

    四个类可协助实现常见的专用同步语句.Semaphore 是一个经典的并发工具.CountDownLatch 是一个极其简单但又极其常用的实用工具,用于在保持给定数目的信号.事件或条件前阻塞执行.Cyc ...

  8. Bash数组

    1. 数组申明 declare -a array 2. 数组赋值 #法1 array=(var1 var2 var3 ... varN) #法2 array=([]=var1 []=var2 []=v ...

  9. spring cloud sleuth

    新建spring boot工程trace-1,添加pom依赖 <dependency> <groupId>org.springframework.cloud</group ...

  10. Enterprise Library 6 学习笔记

    今天是2014年上班第一天,想着今年要做点与往年不同的事情,就从写博客开始吧. 公司的项目一般都用微软的企业库,一直没时间好好研究,第一天上班还不忙,就抽空研究了下.搜索一下,发现这个企业库已经到了6 ...