Android 自定义控件——View(学习篇)

Android View体系(九)自定义View 学习了以上的文章后,接下来我们来讲讲自定义View,自定义View一直被认为是高手掌握的技能,因为情况太多,想实现的效果又变化多端,但它也要遵循一定的规则,我们要讲的就是这个规则,至于那些变化多端的酷炫的效果就由各位来慢慢发挥了。但是需要注意的是凡事都要有个度,自定义View毕竟不是规范的控件,如果不设计好不考虑性能反而会适得其反,另外适配起来可能也会产生问题,笔者的建议是如果能用系统控件的还是尽量用系统控件。 阅读详情

自定义View步骤:

1、自定义View的属性;

2、在构造方法中获取自己定义的属性;

3、重写onMesure();

4、重写onDraw();

学习小结:

一、declare-styleable:declare-styleable是给自定义控件添加自定义属性用的。

1.首先,先写attrs.xml

在res-vlaues文件夹下创建资源文件attrs.xml或则自定义一个资源文件xx.xml,都可以。

之后在里面配置declare-styleable ,name为PersonAttr。

可能这里有人会问,format是什么,里面的单词代表的又是什么意思。

format就是格式,里面的就是这个属性对应的格式,下面列出来大致的格式有:

1. reference:参考某一资源ID,以此类推

(1)属性定义:

<declare-styleable name = "名称">

<attr name = "background" format = "reference" />

</declare-styleable>

(2)属性使用:

<ImageView

android:layout_width = "42dip"

android:layout_height = "42dip"

android:background = "@drawable/图片ID"

/>

2. color:颜色值

<declare-styleable name = "名称">

<attr name = "textColor" format = "color" />

</declare-styleable>

3. boolean:布尔值

<declare-styleable name = "名称">

<attr name = "focusable" format = "boolean" />

</declare-styleable>

4. dimension:尺寸值。注意,这里如果是dp那就会做像素转换

<declare-styleable name = "名称">

<attr name = "layout_width" format = "dimension" />

</declare-styleable>

5. float:浮点值。

6. integer:整型值。

7. string:字符串

8. fraction:百分数。

9. enum:枚举值

10. flag:是自己定义的,类似于 android:gravity="top",就是里面对应了自己的属性值。

11. reference|color:颜色的资源文件。

12.reference|boolean:布尔值的资源文件

注意://由于reference是从资源文件中获取:所以在XML文件中写这个属性的时候必须 personattr:name="@string/app_name"这种格式,否则会出错

2.设置好属性文件后,在使用的布局中写相关配置:

  1. xmlns:personattr="http://schemas.android.com/apk/res/com.example.declare_styleable"  
  2. xmlns:你自己定义的名称="http://schemas.android.com/apk/res/你程序的package包名"    (我这是com.example.declare_styleable)  

3.最后在自定义控件的构造方法中获取你配置的属性值:

public class PersonView extends TextView {
	public PersonView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}

	public PersonView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
	}

	public PersonView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		TypedArray tArray = context.obtainStyledAttributes(attrs,R.styleable.PersonAttr);//获取配置属性
		String name = tArray.getString(R.styleable.PersonAttr_name);<span style="font-family: Arial, Helvetica, sans-serif;">//得到属性name</span>
		int age = tArray.getInt(R.styleable.PersonAttr_age, 15);
		Boolean adult = tArray.getBoolean(R.styleable.PersonAttr_adult, false);
		String str_adult = getAdultStatus(adult);
		int weight = tArray.getInt(R.styleable.PersonAttr_weight, 1);// 默认是中等身材,属性为:1
		String str_weight = getWeightStatus(weight);//获得肥胖属性
		float textSize = tArray.getDimension(R.styleable.PersonAttr_textSize,R.dimen.default_text_size);// 如果你设置为DP等单位,会做像素转换
		tArray.recycle();//回收资源
//		setTextSize(textSize);//设置字体大小
		setText("姓名:" + name + "\n" + "年龄:" + age + "\n" + "是否成年:" + str_adult
				+ "\n" + "体形:" + str_weight);//给自定义的控件赋值
	}
	
	/** 根据传入的值判断是否成年 */
	public String getAdultStatus(Boolean adult ){
		String str_adult = "未成年";
		if (adult) {
			str_adult = "成年";
		}
		return str_adult;
	}
	
	/** 根据传入的值判断肥胖状态 */
	public String getWeightStatus(int weight){
		String str_weight = "中等";
		switch (weight) {
		case 0:
			str_weight = "瘦";
			break;
		case 1:
			str_weight = "中等";
			break;
		case 2:
			str_weight = "肥胖";
			break;
		default:
			break;
		}
		return str_weight;
	}
}

 

【安卓自定义控件系列】安卓自定义控件之组合控件 在安卓开发中,谷歌已经为我们提供了许多原生控件,基本上能够满足我们日常的开发需求,但是某些项目中原生控件可能达不到产品所要求的各式各样的酷炫效果或功能效果,这个时候我们只能自己自定义控件来满足项目需求,我们知道自定义控件包括三种方式: 1继承控件,即继承谷歌提供的原生控件,在此基础上提供一些原生控件不具备的功能,如github上各种酷炫效果的开源组件基本上都是采用的这种方式. 2组合控件:即组 阅读详情

相关推荐

安卓面试之自定义View流程及原理

自定义View原理学习博客整理

lentolove的博客 3412

android 自定义View之View的测量(onMeasure()方法)

在自定义控件的过程中,系统在绘制View前,必须对View进行测量,已使后面的onLayout(设置View的放置位置)能够顺利进行。而对VIew的测量的过程则是在onMeasure()中进行的。可能这时有的同学就发现问题了,说,自己以前自定义的View没有重写onMeasure()方法,仍然可以正常运行,这是因为什么呢?        让我们先从头说起,android系统给我们提供了一个设计短

gongzhiyao37390814的博客 5608

Android实现自定义相机系列(1)—自定义view裁剪控件

目标 本系列文章主要记录自定义相机拍照系列,包括: 1、使用Android的Camera API自定义拍照模式,例如人脸拍照,OCR拍照等; 2、对拍完的照片进行裁剪; 3、自定义图片伸缩view,使用手势对图片进行放大缩小操作; 本人写博客也是为了自己学习和分享,也会参考网络上许多文章和开源项目,希望大家一块学习进步。这一篇文章主要介绍自定义裁剪view控件。 ...

renzhongrui的博客 2707

android自定义起止时间的时间刻度尺,Android 自定义View篇(六)实现时钟表盘效果...

前言Android 自定义 View 是高级进阶不可或缺的内容,日常工作中,经常会遇到产品、UI 设计出花里胡哨的界面。当系统自带的控件不能满足开发需求时,就只能自己动手撸一个效果。本文就带自定义 View 初学者手动撸一个效果,通过自定义 View 实现钟表功能,每行代码都有注释,保证易懂,看不懂你留言打我!!!实现效果1、先看效果图在这里插入图片描述2、下载地址3、步骤分析实现以上效果,主要分...

weixin_34031238的博客 1098

安卓自定义view之打造滚动的通知栏

闲谈: 这段时间一直忙着做毕业设计,没什么时间写blog,但是秉着分享的原则,还是要和小伙伴们分享所学的东西,如果可以的话,也希望我的博客能够帮助到需要的人。(打个广告吧,有兴趣的同学可以加一下我的安卓QQ群279031247,一起讨论安卓开发遇到的问题)。 前言: 最近在开发一个app的时候,有个滚动通知栏的需求,自己花了一点时间去实现了一下,唯一可惜的事情就是自己没有多少时间做成

SmartIceberg的博客 1724

Android自定义View初探——自定义组合控件

声明: 本文章例子来源于bilibili 程序猿拉大锯 本文章主要是自己的一些知识点理解,记录自己的学习 自己的感悟: 自己从19年的下半年就开始第一次接触自定义View的内容,期间也断断续续看过一些视频,也自己亲手做过一些小的demo啊等等,最终却都是以失败告终,可能是网上的关于自定义View的内容很乱也没有一个很完整的一套流程,也可能是自己当时比较浮躁,看一些知识点时都是大眼一看,就觉得自己会了,等到真正操作起来却又手忙脚乱,无从下手的感觉。知识嘛,肯定是多多益善,毕竟也是跟我们的薪资有着直接关系的,

yuhang01的博客 904

android的自定义toolbar

以前的actionbar已经不再流行使用,现在的toolbar,可以更加人性化的满足需求,简单的叙述一下吧。 既然我们要使用toolbar。那么我在先在styles.xml中,将AppTheme修改成noActionbar,修改我们应用的主题,使用toolbar主题。 name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

唯一郭大侠 587

android自定义控件宽高的获取

NULL 博文链接:https://l540151663.iteye.com/blog/2005544

Android自定义控件View(一)

Android自定义控件View(一)

weixin_34037977的博客 79

500道C++面试高频题解析(附答案、实战示例与进阶追问)

本文提供500道C++面试高频题的详细解析,涵盖基础概念到进阶应用,包括面向对象编程、内存管理、现代C++特性、并发编程等核心考点。每道题配有实战示例和进阶追问,帮助开发者突破八股文局限,掌握解决实际问题的能力,适合准备C++技术面试的工程师系统复习。

weixin_29002595的博客 311

基于STM32F103C8T6单片机设计CAN接口8路继电器控制板硬件(原理图+PCB)+软件源码

基于STM32F103C8T6单片机设计CAN接口8路继电器控制板硬件(原理图+PCB)+软件源码,仅供学习及设计参考。

GJZGRB的博客 1417

Android:Android学习进阶路线

今天查资料的时候看到一篇文档,总结了学习Android的进阶路线,个人觉得挺不错的,和大家分享分享:一、 基础篇 需要掌握的技能如下:1、熟练掌握基本控件以及容器控件的使用 ; 常用的基本控件有:Button 、TextView、EditText、ListView等 常用的容器控件有:FrameLayout、LinearLayout、RelativeLayout等 2、熟练掌握相关监听器的注册

BAOLIANG196的博客 670

FSL软件安装

FSL软件安装

huang_tianyuan的博客 2631

android加载大插件下载地址,Android开发一款优美的加载控件

最近抽了点时间学习了Android自定义view,然后花了大概几天时间搞了个自己的一个款开源。让我们先来看看效果:总体效果本开源主要实现了一款精美、优雅的加载控件。她目前有两种类型:弧形加载(CircleProgressView)和水平加载(HorizontalProgressView),同时,你可以为她设置颜色渐变效果。欢迎大家献上宝贵的star和issue,我将继续努力完善它,也欢迎大家和我一...

weixin_29701553的博客 194

用ADS2023手把手仿真SKYWORKS SMA1234变容二极管:从Datasheet到S参数结果全流程

本文详细介绍了如何使用ADS2023仿真SKYWORKS SMA1234变容二极管的全流程,从Datasheet参数解析到S参数结果验证。通过等效电路建模、关键公式编写和仿真设置,帮助工程师掌握变容二极管在射频电路设计中的应用技巧,提升仿真精度和工程实践能力。

weixin_29233333的博客 502

机器学习模型——非线性回归

升维是一种常用的处理非线性问题的方法,它通过将原始数据从低维空间映射到高维空间来增强模型的表达能力。我们可以看出,二维数据用一维直线很难去很好的拟合。升维里的degree设置的不易过大,否则容易造成维度灾难。升维后,拟合的线与原数据比较符合。将非线性问题转换为线性问题。

qq_60688380的博客 1422

Android自定义View的实现方法,带你一步步深入了解View(四)

不知不觉中,带你一步步深入了解View系列的文章已经写到第四篇了,回顾一下,我们一共学习了LayoutInflater的原理分析、视图的绘制流程、视图的状态及重绘等知识,算是把View中很多重要的知识点都涉及到了。如果你还没有看过我前面的几篇文章,建议先去阅读一下,多了解一些原理方面的东西。 之前我有承诺过,会在View这个话题上多写几篇博客,讲一讲View的工作原理,以及自定义View的方法。现在前半部分的承诺已经如约兑现了,那么今天我就要来兑现后面部分的承诺,讲一讲自定义View的实现方法,同时这也是带

郭霖的专栏 18万+

DirectX修复工具使用技巧之二——手动修复C++创建失败的文件

最后更新:2021-2-25 随着V4.0正式版的发布,近来有部分用户来咨询如何解决C++文件创建失败的问题。在此我将以解决最常见的C++2015-2019文件创建失败为例,向大家演示一下在线修复的方法,其他C++或文件的方法大同小异。此次操作以Windows 7为例,其他系统相应参考即可。 首先,如果希望程序能手动在线修复创建失败的失败,请首先确定您使用的V4.0.2版或更高版本,老版本不支持此功能。查看程序版本的方式可以把鼠标放在DirectX Repair.e...

VBcom的专栏 6万+

【安卓学习之UI学习】 自定义组合控件View 的开发

█ 【安卓学习之常见问题】 自定义组合控件View 的开发 █ 相关文章: -   ● 【android学习开源项目之BasePopup】BasePopup(PopupWindow)进行二次封装  ● 【android学习开源项目之AndroidAutoSize】AndroidAutoSize和DialogFragment的适配 █ 读前说明: -   ● 本文通过学习别人写demo,...

任我飞的博客 401

在 ABAP Cloud 里优雅地调用 HTTP 服务:新一代 HTTP Client 全面实践与落地指南

摘要: 随着ABAP Cloud时代的到来,HTTP通信在SAP系统集成中的角色日益重要。传统CL_HTTP_CLIENT存在维护成本高、边界模糊等问题,而新一代ABAP HTTP Client采用Destination驱动的调用方式,通过CL_HTTP_DESTINATION_PROVIDER支持四种创建方式(URL、通信安排、BTP Destination服务、SM59连接)。该模型将连接配置与业务逻辑分离,使URL、认证等参数可集中管理。典型调用流程包括:基于Destination创建Client,设

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 251

在 ABAP 中把变量一次写对:深入理解 FINAL 内联声明与不可变变量

摘要:ABAP中的FINAL声明操作符用于定义不可变变量,强调"当前上下文中的唯一写位置",能有效防止变量被意外修改,提升代码健壮性和可读性。官方建议优先在单次赋值的场景使用FINAL替代DATA。其核心规则包括:1)写位置唯一但可多次执行(如循环内);2)不创建块级作用域;3)对引用变量仅约束引用本身而非对象内容。典型适用场景包括:结果值只读、输入快照保存和中间结果保护。例外情况如游标变量不适用,因需多次写操作。正确使用FINAL可显著降低代码维护风险。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1046

安卓自定义控件(view)

安卓自定义view 自定义的view View的尺寸与测量 Canvas与Paint(画布与画笔) 一、自定义View 优点:控件最自由的实现方法,能自由控制整个View的实现 缺点:比较复杂,需要正确测量View的尺寸 手动绘制各种视觉效果、工作量大       本次学习的内容就是通过继承View来实...

qq_44739668的博客 567

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

安卓自定义View

前言 每一个Activity,都有一个View,如MainActivity: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.activity_main); } 以上代码中的this.setContentView(R.layout.activity_main); 为MainAct

GluttonK的博客 475

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android控件架构与自定义控件

引言 最近在开发的路上越走越远了,每天在看各位大神公众号更新内容是自定义View的时候,一些小的内容有点模具,决定回过头来温习一下过往的内容。此篇也是根据android群英传来总结的一篇文章。 1 Android控件架构 Android的每个控件都是占一块矩形的区域,大致的分两类,继承View和ViewGroup,ViewGroup相当于一个容器,他可以管理多个字View,整个界面上的控...

Panda_Program的博客 1028

android 自定义view控件,Android 自定义View——自定义View控件

Android给我们提供了大量的View控件,但这还是远远满足不了我们的要求,有时候开发所需要的控件形式是在Android提供的控件中是不存在,这就需要我们自己去定义一个。那么如何自定义控件?学习自定义控件,首先要先掌握Canvas类的使用。CanvasCanvas, 我们称之为“画布“,主要适用于绘制View的。Canvas中提供了大量绘制图形的方法:绘制扇形:drawArc(RectF ova...

weixin_35511284的博客 509
上一篇: Android平台关于时间和日期的相关类和方法(Date/Time)
下一篇: PagerAdapter和FragmentPagerAdapter和FragmentStatePagerAdapter区别
LXB-89
博客等级 码龄11年 34粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值