
YCRedDotView——便捷的自定义红点控件,无需改动原有代码,轻松实现解耦与数字显示,兼容多种场景。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
YCRedDotView是一款功能强大的自定义红点视图组件,支持无侵入式集成及数字内容展示,适用于多样化应用场景。
目录介绍
01. 该库介绍
02. 效果展示
03. 如何使用
04. 注意要点
05. 优化问题
06. 部分代码逻辑
### 01. 该库介绍
自定义红点控件,无需修改原有代码即可完全解耦。不仅可以设置带有数字的红点,还可以单独设置无数字的小红点,使用起来非常方便。
与网上一些案例不同的是,在这些案例中通常会继承View并进行测量和绘制操作来实现功能,而该库则不需要这样做。通过继承TextView也可以轻松完成所需的功能,并支持将其放置于多种控件上(例如TextView、Button、LinearLayout、RelativeLayout等)。
其主要原理是:首先继承自TextView类,然后设置LayoutParams属性以调整布局参数;接着根据需求设定内容和背景等相关样式;最后利用addView方法将红点添加到父容器中。
### 02. 效果展示
略(此处应插入效果截图或视频链接)
### 03. 如何使用
在项目中引用该库,可以通过如下方式实现:
```java
implementation cn.yc:YCRedDotViewLib:1.0.3
```
创建红点视图并设置相关属性:
```java
// 创建红点view实例
YCRedDotView ycRedDotView = new YCRedDotView(this);
ycRedDotView.setTargetView(tv1); // 设置依附的控件为tv1
ycRedDotView.setBadgeCount(10); // 设定数字显示为10
ycRedDotView.setRedHotViewGravity(Gravity.END); // 将红点放置在右侧
int count = ycRedDotView.getBadgeCount(); // 获取当前设置的数字值
// 如果不需要设定具体数值,而是使用直径来表示小圆圈大小:
ycRedDotView.setBadgeView(10);
```
调整边距:
```java
ycRedDotView.setBadgeMargin(0, 10, 20, 0); // 设置上下左右的内边距值
```
### 04. 注意要点
- 当设置数字超过99时,将显示为99+。
- 数字设为零,则红点不会出现。
### 05. 优化问题
与网上部分案例相比,该库无需进行测量和绘制操作,代码简洁明了却功能全面。对于那些需要在布局文件中预先设置的其他红点控件来说,在大量使用场景下可能会显得不够灵活;而本库则可以在不改动现有代码的基础上轻松添加所需效果。
### 06. 部分代码逻辑
为了将自定义的小红点视图正确地附加到目标view上,需要进行如下处理:
```java
public void setTargetView(View view){
if (getParent() != null) {
((ViewGroup) getParent()).removeView(this);
}
// 如果传入的view为null,则直接返回
if(view == null){
return;
}
// 检查目标视图所在的父容器类型,并进行相应处理
if (view.getParent() instanceof FrameLayout){
((FrameLayout) view.getParent()).addView(this);
} else if (view.getParent() instanceof ViewGroup) {
final ViewGroup parentContainer = (ViewGroup)view.getParent();
int groupIndex = parentContainer.indexOfChild(view);
// 移除目标视图,创建新的帧布局容器并重新添加
parentContainer.removeView(view);
FrameLayout badgeContainer = new FrameLayout(getContext());
// 保持原有的LayoutParams属性不变
ViewGroup.LayoutParams parentLayoutParams = view.getLayoutParams();
badgeContainer.setLayoutParams(parentLayoutParams);
// 目标视图的大小设置为父容器匹配,确保完全覆盖
view.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
// 将目标view和红点view添加到新的帧布局中
parentContainer.addView(badgeContainer, groupIndex, parentLayoutParams);
badgeContainer.addView(view);
badgeContainer.addView(this);
} else {
Log.e(getClass().getSimpleName(), ParentView is must needed);
}
}
```
全部评论 (0)


