Android自定义View —— TypedArray
在上一篇中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相关推荐
- Android 自定义 圆环,Android自定义view实现圆环效果实例代码
先上效果图,如果大家感觉不错,请参考实现代码. 重要的是如何实现自定义的view效果 (1)创建类,继承view,重写onDraw和onMesure方法 public class CirclePerc ...
- android自定义抽奖,Android自定义view制作抽奖转盘
本文实例为大家分享了Android自定义view制作抽奖转盘的具体代码,供大家参考,具体内容如下 效果图 TurntableActivity package com.bawei.myapplicati ...
- android view 渐变动画,Android自定义view渐变圆形动画
本文实例为大家分享了Android自定义view渐变圆形动画的具体代码,供大家参考,具体内容如下 直接上效果图 自定义属性 attrs.xml文件 创建一个类 ProgressRing继承自 view ...
- android 自定义 child,Android自定义View
前言 Android自定义View的详细步骤是我们每一个Android开发人员都必须掌握的技能,因为在开发中总会遇到自定义View的需求.为了提高自己的技术水平,自己就系统的去研究了一下,在这里写下一 ...
- android自定义控件是一个 内部类 如何在xml中引用,android 自定义view属性
android 自定义view属性 一个完美的自定义控件也可以添加xml来配置属性和风格.要实现这一点,可按照下列步骤来做: 1) 添加自定义属性到xml文件中 2) 在xml的中,指定属性的值 3) ...
- 自定义圆形倒计时Android,Android自定义View倒计时圆
本文实例为大家分享了Android自定义View倒计时圆的具体代码,供大家参考,具体内容如下 创建attr 创建DisplayUtil 类 import android.content.Context ...
- android 自定义view滚动条,Android自定义View实现等级滑动条的实例
Android自定义View实现等级滑动条的实例 实现效果图: 思路: 首先绘制直线,然后等分直线绘制点: 绘制点的时候把X值存到集合中. 然后绘制背景图片,以及图片上的数字. 点击事件down的时候 ...
- 精通Android自定义View(十二)绘制圆形进度条
1 绘图基础简析 1 精通Android自定义View(一)View的绘制流程简述 2 精通Android自定义View(二)View绘制三部曲 3 精通Android自定义View(三)View绘制 ...
- 精通Android自定义View(五)自定义属性值使用详情
1 可查看Android自定义View的基本使用 1 精通Android自定义View(一)自定义控的基本使用 2 精通Android自定义View(二)自定义属性使用详解 2 string 字符串 ...
最新文章
- Andorid的Linux基础教学之四 进程的生死存亡
- android 6.0谷歌,Android 6.0来了!谷歌月底要发布Android M系统
- python 排序 sorted 如果第一个条件 相同 则按第二个条件排序
- linux下查找命令汇总(转)
- datareader对象转化为int_【Angew. Chem. Int. Ed.】光催化丙二烯的去消旋反应
- 02-05 Python库-time datetime
- 欧洲与北美5G开战,最后的赢家却是高通?
- 【毕业设计】《数据库原理及应用技术》课程指导平台的开发
- 2020阿里云线上峰会预告
- 【图像隐写】基于matlab GUI DWT与SVD数字水印 【含Matlab源码 253期】
- 淘宝店铺950自定义模块实现1920全屏代码
- mysql复制表结构创建新表
- linux 安全删除文件_如何在Linux上安全删除文件
- matlab 模拟光源,基于 Matlab 的激光光斑模拟.pdf
- WIFI智能插座Homekit
- .NET在蹉跎中一路前行1
- HTTP(超文本传输协议)详细解析
- 计算机硬件和软件的主要功能,网络技术在计算机软硬件的作用
- idea运行javaweb项目出现“该网页无法正常运作”
- 【微信小程序】协同工作与发布
热门文章
- 伦理困境:人工智能浪潮与“AI威胁论”之争
- Java EE学习心得
- Go 学习笔记(57)— Go 第三方库之 amqp (RabbitMQ 生产者、消费者整个流程)
- QT5.3 + vs2012 + box2d环境配置
- 利用cre2进行分组模式匹配的实例
- 【牛腩新闻发布系统】整和后台05
- RuntimeError: Expected object of backend CUDA but got backend CPU for argument
- TVM图优化与算子融合
- NVIDIA FFmpeg 转码技术分析
- Python库全部整理出来了,非常全面