在上一篇中Android 自定义View Canvas —— Bitmap写到了TypedArray 这个属性

下面也简单的说一下TypedArray的使用

TypedArray 的作用:

用于从该结构检索值的索引对应于给定给获取StyledAttributes的属性的位置。

TypedArray  使用 obtainStyledAttributes  检索此上下文主题中的样式化属性信息

下面使用TypedArray 来 显示一张图片

自定义TestView

 public class TestView extends View {// paint 初始化private Paint paint = new Paint();private Bitmap testBitmap;private int testBitmapResID;public TestView(Context context) {super(context);}public TestView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);init(context, attrs);}public TestView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context, attrs);}private void init(Context context, AttributeSet attrs) {// 检索此上下文主题中的样式化属性信息TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.FindView);testBitmap = BitmapFactory.decodeResource(getResources(), testBitmapResID);// 这里styleable 和面的跟的是attrs.xml中declare-styleable 里面的name和attr的nametestBitmapResID = typedArray.getResourceId(R.styleable.FindView_test_image,R.drawable.ic_launcher_background);// 回收TypedArray,供以后的调用方重新使用, 这个不要忘记添加typedArray.recycle();}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);}@Overrideprotected void onLayout(boolean changed, int left, int top, int right, int bottom) {super.onLayout(changed, left, top, right, bottom);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);paint.setStyle(Paint.Style.FILL);testBitmap = BitmapFactory.decodeResource(getResources(), testBitmapResID);canvas.drawBitmap(testBitmap, 100, 100, paint);}}

attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><declare-styleable name="FindView"><attr name="test_image" format="reference" /></declare-styleable>
</resources>

布局中使用attrs.xml 了里面的 attr 里面的name test_name 来显示图片

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><com.hly.view.TestViewandroid:id="@+id/image"android:layout_width="wrap_content"android:layout_height="wrap_content"app:test_image="@mipmap/girl" /></LinearLayout>

好了一个简单的绘制图片就完成了,运行看下效果

上面的demo 中 attrs 里面的 format使用的是 "reference" 这个表示引用,参考某一资源ID,它还有很多其他的属性

如下:

reference :表示引用,参考某一资源ID
string :表示字符串
color :表示颜色值
dimension :表示尺寸值
boolean :表示布尔值
integer :表示整型值
float :表示浮点值
fraction :表示百分数
enum :表示枚举值
flag :表示位运算

下面在写一个text 的demo 使用下其中的几个属性

public class TestView extends View {// paint 初始化private Paint paint = new Paint();private String text = "";public TestView(Context context) {super(context);}public TestView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);init(context, attrs);}public TestView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context, attrs);}private void init(Context context, AttributeSet attrs) {// 检索此上下文主题中的样式化属性信息TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.FindView);// 这里styleable 和面的跟的是attrs.xml中declare-styleable 里面的name和attr的nametext = typedArray.getString(R.styleable.FindView_test_text);int textColor = typedArray.getColor(R.styleable.FindView_test_color,Color.parseColor("#00d8a0"));float textSize = typedArray.getDimension(R.styleable.FindView_test_size, 33);paint.setTextSize(textSize);//画笔字体大小设置paint.setColor(textColor);//画笔的颜色// 回收TypedArray,供以后的调用方重新使用, 这个不要忘记添加typedArray.recycle();}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);}@Overrideprotected void onLayout(boolean changed, int left, int top, int right, int bottom) {super.onLayout(changed, left, top, right, bottom);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);paint.setStyle(Paint.Style.FILL);canvas.drawText(text, 100, 100, paint);}}

attrs.xml 代码如下

<?xml version="1.0" encoding="utf-8"?>
<resources><declare-styleable name="FindView"><attr name="test_text" format="string" /><attr name="test_color" format="color" /><attr name="test_size" format="dimension" /></declare-styleable>
</resources>

布局中的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><com.hly.view.TestViewandroid:id="@+id/image"android:layout_width="wrap_content"android:layout_height="wrap_content"app:test_color="@android:color/holo_red_dark"app:test_size="40dp"app:test_text="我是胡小牧" /></LinearLayout>

实现的效果:

Android自定义View —— TypedArray相关推荐

  1. Android 自定义 圆环,Android自定义view实现圆环效果实例代码

    先上效果图,如果大家感觉不错,请参考实现代码. 重要的是如何实现自定义的view效果 (1)创建类,继承view,重写onDraw和onMesure方法 public class CirclePerc ...

  2. android自定义抽奖,Android自定义view制作抽奖转盘

    本文实例为大家分享了Android自定义view制作抽奖转盘的具体代码,供大家参考,具体内容如下 效果图 TurntableActivity package com.bawei.myapplicati ...

  3. android view 渐变动画,Android自定义view渐变圆形动画

    本文实例为大家分享了Android自定义view渐变圆形动画的具体代码,供大家参考,具体内容如下 直接上效果图 自定义属性 attrs.xml文件 创建一个类 ProgressRing继承自 view ...

  4. android 自定义 child,Android自定义View

    前言 Android自定义View的详细步骤是我们每一个Android开发人员都必须掌握的技能,因为在开发中总会遇到自定义View的需求.为了提高自己的技术水平,自己就系统的去研究了一下,在这里写下一 ...

  5. android自定义控件是一个 内部类 如何在xml中引用,android 自定义view属性

    android 自定义view属性 一个完美的自定义控件也可以添加xml来配置属性和风格.要实现这一点,可按照下列步骤来做: 1) 添加自定义属性到xml文件中 2) 在xml的中,指定属性的值 3) ...

  6. 自定义圆形倒计时Android,Android自定义View倒计时圆

    本文实例为大家分享了Android自定义View倒计时圆的具体代码,供大家参考,具体内容如下 创建attr 创建DisplayUtil 类 import android.content.Context ...

  7. android 自定义view滚动条,Android自定义View实现等级滑动条的实例

    Android自定义View实现等级滑动条的实例 实现效果图: 思路: 首先绘制直线,然后等分直线绘制点: 绘制点的时候把X值存到集合中. 然后绘制背景图片,以及图片上的数字. 点击事件down的时候 ...

  8. 精通Android自定义View(十二)绘制圆形进度条

    1 绘图基础简析 1 精通Android自定义View(一)View的绘制流程简述 2 精通Android自定义View(二)View绘制三部曲 3 精通Android自定义View(三)View绘制 ...

  9. 精通Android自定义View(五)自定义属性值使用详情

    1 可查看Android自定义View的基本使用 1 精通Android自定义View(一)自定义控的基本使用 2 精通Android自定义View(二)自定义属性使用详解 2 string 字符串 ...

最新文章

  1. Andorid的Linux基础教学之四 进程的生死存亡
  2. android 6.0谷歌,Android 6.0来了!谷歌月底要发布Android M系统
  3. python 排序 sorted 如果第一个条件 相同 则按第二个条件排序
  4. linux下查找命令汇总(转)
  5. datareader对象转化为int_【Angew. Chem. Int. Ed.】光催化丙二烯的去消旋反应
  6. 02-05 Python库-time datetime
  7. 欧洲与北美5G开战,最后的赢家却是高通?
  8. 【毕业设计】《数据库原理及应用技术》课程指导平台的开发
  9. 2020阿里云线上峰会预告
  10. 【图像隐写】基于matlab GUI DWT与SVD数字水印 【含Matlab源码 253期】
  11. 淘宝店铺950自定义模块实现1920全屏代码
  12. mysql复制表结构创建新表
  13. linux 安全删除文件_如何在Linux上安全删除文件
  14. matlab 模拟光源,基于 Matlab 的激光光斑模拟.pdf
  15. WIFI智能插座Homekit
  16. .NET在蹉跎中一路前行1
  17. HTTP(超文本传输协议)详细解析
  18. 计算机硬件和软件的主要功能,网络技术在计算机软硬件的作用
  19. idea运行javaweb项目出现“该网页无法正常运作”
  20. 【微信小程序】协同工作与发布

热门文章

  1. 伦理困境:人工智能浪潮与“AI威胁论”之争
  2. Java EE学习心得
  3. Go 学习笔记(57)— Go 第三方库之 amqp (RabbitMQ 生产者、消费者整个流程)
  4. QT5.3 + vs2012 + box2d环境配置
  5. 利用cre2进行分组模式匹配的实例
  6. 【牛腩新闻发布系统】整和后台05
  7. RuntimeError: Expected object of backend CUDA but got backend CPU for argument
  8. TVM图优化与算子融合
  9. NVIDIA FFmpeg 转码技术分析
  10. Python库全部整理出来了,非常全面