android自定义radiogroup,Android 自定义View实现任意布局的RadioGroup效果
前言
RadioGroup是继承LinearLayout,只支持横向或者竖向两种布局。所以在某些情况,比如多行多列布局,RadioGroup就并不适用 。
本篇文章通过继承RelativeLayout实现自定义RadioGroup,实现RadioButton的任意布局。效果图如下:
代码(RelativeRadioGroup)
/**
* Author : BlackHao
* Time : 2018/10/26 10:46
* Description : 自定义 RadioGroup
*/
public class RelativeRadioGroup extends RelativeLayout implements CompoundButton.OnCheckedChangeListener {
private int checkId = -1;
private CompoundButton.OnCheckedChangeListener mChildOnCheckedChangeListener;
public RelativeRadioGroup(Context context) {
super(context);
}
public RelativeRadioGroup(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RelativeRadioGroup(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
//添加监听
for (int i = 0; i < getChildCount(); i++) {
View v = getChildAt(i);
if (v instanceof RadioButton && !(v instanceof CompoundButton.OnCheckedChangeListener)) {
((RadioButton) v).setOnCheckedChangeListener(this);
}
}
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
setCheck(buttonView.getId(), isChecked);
}
public void check(@IdRes int checkId) {
if (checkId == -1 || this.checkId == checkId) {
return;
}
setCheck(checkId, true);
}
public void clearCheck() {
setCheck(-1, false);
}
public int getCheckedRadioButtonId() {
return this.checkId;
}
/**
* 设置选中状态
*/
private void setCheck(@IdRes int checkId, boolean isChecked) {
if (checkId != -1 && this.checkId == checkId) {
return;
}
if (checkId != -1) {
CompoundButton view = (CompoundButton) findViewById(checkId);
//未选中的RadioButton被选中
if (checkId != this.checkId && isChecked) {
this.checkId = checkId;
if (mChildOnCheckedChangeListener != null) {
mChildOnCheckedChangeListener.onCheckedChanged(view, true);
}
//某个RadioButton被选中,将其他的改为未选中
for (int i = 0; i < getChildCount(); i++) {
View v = getChildAt(i);
if (v instanceof RadioButton && v.getId() != checkId) {
((RadioButton) v).setChecked(false);
} else if (v instanceof RadioButton && v.getId() == checkId) {
((RadioButton) v).setChecked(true);
}
}
}
//被选中的RadioButton被取消选中
if (checkId == this.checkId && !isChecked) {
this.checkId = checkId;
if (mChildOnCheckedChangeListener != null) {
mChildOnCheckedChangeListener.onCheckedChanged(view, false);
}
}
} else {
//清空所有选择
if (this.checkId != -1) {
this.checkId = -1;
CompoundButton view = (CompoundButton) findViewById(this.checkId);
//将选中的置为未选中
if (view instanceof RadioButton) {
view.setChecked(false);
}
}
}
}
public void setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener mChildOnCheckedChangeListener) {
this.mChildOnCheckedChangeListener = mChildOnCheckedChangeListener;
}
}
代码并没有太多,也很容易理解。有什么不明白的可以留言。
总结
以上所述是小编给大家介绍的Android 自定义View实现任意布局的RadioGroup效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
android自定义radiogroup,Android 自定义View实现任意布局的RadioGroup效果相关推荐
- Android Canvas制作一个可以拖动改变任意形状的四边形效果,并填充颜色
先上效果图: 思路: 1. 定义四个点, 初始化四个点的坐标,绘制点. 2. 绘制 直线,把四个点连接起来. 3. 根据四个点的坐标绘制直线路径,填充颜色. 4. 判断手势是否点中四个点的坐标范围内. ...
- Android自定义控件入门到精通--View树的布局
<Android自定义控件入门到精通>文章索引 ☞ https://blog.csdn.net/Jhone_csdn/article/details/118146683 <Andro ...
- Android面试收集录12 View测量、布局及绘制原理
一.View绘制的流程框架 View的绘制是从上往下一层层迭代下来的.DecorView-->ViewGroup(--->ViewGroup)-->View ,按照这个流程从上往下, ...
- Android最简单的实现View拖拽跟随手指移动效果
今天想实现这个功能,但是网上搜索代码,都是利用setPadding,setMargin 等方法去实现的,这在Android 4.0 以前是没问题的,但是,Android 4.0 后系统已经提供了更简单 ...
- Android 自定义View实现圆形头像(适用于任意布局)
先看效果图: 先来说下我的思路:首先我需要在自定义View中动态获取头像id,那么就需要在attrs文件中,写一个关于该View类的自定义属性.这里仿照ImageView,取名为src,类型为refe ...
- android 自定义 child,Android自定义View
前言 Android自定义View的详细步骤是我们每一个Android开发人员都必须掌握的技能,因为在开发中总会遇到自定义View的需求.为了提高自己的技术水平,自己就系统的去研究了一下,在这里写下一 ...
- android java 圆角_Android自定义View实现带4圆角或者2圆角的效果
1 问题 实现任意view经过自定义带4圆角或者2圆角的效果 2 原理 1) 实现view 4圆角 我们只需要把左边的图嵌入到右边里面去,最终显示左边的图就行. 2) 实现view上2圆角 我们只需要 ...
- android 两边圆角,Android自定义View实现带4圆角或者2圆角的效果
1 问题 实现任意view经过自定义带4圆角或者2圆角的效果 2 原理 1) 实现view 4圆角 我们只需要把左边的图嵌入到右边里面去,最终显示左边的图就行. 2) 实现view上2圆角 我们只需要 ...
- android炫酷的自定义view,Android自定义View实现炫酷进度条
本文实例为大家分享了Android实现炫酷进度条的具体代码,供大家参考,具体内容如下 下面我们来实现如下效果: 第一步:创建attrs文件夹,自定义属性: 第二步:自定义View: /** * Cre ...
最新文章
- keepalived and heartbeat
- Python系列教程之学生信息管理系统
- Jsp—02—项目:登录案例
- 2204 Problem A(水)
- 计算机的键盘功能,电脑键盘功能
- mysql 实验_实验二 MySQL 实验.doc
- 矩阵问题入门(矩阵乘法and矩阵快速幂)acm寒假集训日记22/1/15
- 子类重载父类函数_Python面向对象之继承、重写与重载
- (转) 通过UUID在vSphere虚拟机内外识别硬盘
- bootstrap思想总结_bootstrap学习心得总结-css样式设计分享
- 传教士与野人过河问题
- 我的MacOS上的软件
- python如何爬有道翻译_Python爬虫爬有道翻译
- python re 查找字符串中是否含有汉字
- 战火与秩序迁城显示服务器忙,战火与秩序迁城方法介绍
- 国内下载国外数据集(库)方案整理
- Photoshop脚本 合并所有图层
- 苹果手机显示无法与服务器建立安全连接,苹果手机那个safari浏览器无法与访问器建立安全链接是什么意思...
- BOSS管账深度融合钉能力,打破业财数据壁垒实现数据互通
- 华为鸿蒙电视配置,华为旗下荣耀智慧屏PRO55英寸AI摄像头鸿蒙系统4K超清电视机...