Android自定义View实现TextView右上角动态红点
189 浏览量
更新于2024-09-04
收藏 107KB PDF 举报
"Android开发中实现TextView右上角动态追加圆形红点的实例代码"
在Android应用开发中,有时我们需要在TextView的右上角显示一个动态的圆形红点,通常用于表示有未读消息或者更新。这篇内容将介绍如何通过自定义View来实现这一功能。需求是让这个红点能够随着TextView中的文本内容变化而动态调整位置。
首先,我们需要创建一个新的自定义View,让它继承自View类。以下是一个简单的自定义View的初始化:
```java
public class MyViewAndCircle extends View {
public MyViewAndCircle(Context context) {
this(context, null);
}
public MyViewAndCircle(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MyViewAndCircle(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
```
接下来,我们需要定义一些属性来控制TextView的显示,例如文本内容、字体大小和颜色。这些属性可以通过XML声明式的方式添加到自定义View中:
```xml
<declare-styleable name="CustomMyViewTitle">
<attr name="titleTextview" format="string"/>
<attr name="titleSize" format="dimension"/>
<attr name="titleColor" format="color"/>
</declare-styleable>
```
有了这些基础设置,我们可以在自定义View中绘制文本和红点。在`onDraw()`方法中,我们可以先绘制文本,再根据文本的位置和尺寸画出红点:
```java
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 获取自定义属性值
String titleText = ...; // 获取titleTextview属性值
float textSize = ...; // 获取titleSize属性值
int titleColor = ...; // 获取titleColor属性值
// 绘制文本
Paint paint = new Paint();
paint.setColor(titleColor);
paint.setTextSize(textSize);
paint.setTextAlign(Paint.Align.LEFT);
float textWidth = paint.measureText(titleText);
canvas.drawText(titleText, 0, textSize / 2f + 1, paint);
// 计算红点的位置
float dotX = textWidth + padding;
float dotY = textSize / 2f;
// 绘制红点
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.FILL);
canvas.drawCircle(dotX, dotY, dotRadius, paint);
}
```
这里的关键在于计算红点的位置,使其位于文本的右上角。`dotX`是红点的横坐标,等于文本宽度加上一定的内边距;`dotY`是红点的纵坐标,通常设置为文本高度的一半。
最后,为了使这个自定义View能被XML布局文件引用,我们需要在布局文件中声明并设置属性:
```xml
<com.example.MyViewAndCircle
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:titleTextview="动态文本"
app:titleSize="16sp"
app:titleColor="@android:color/black" />
```
通过这种方式,我们可以在Android应用中轻松实现TextView右上角动态追加的圆形红点,并且可以根据需要自定义文本属性和红点样式。这个实例代码适用于那些希望在不改变原有布局结构的情况下,快速实现类似功能的开发者。
2019-09-23 上传
2021-01-04 上传
2021-01-04 上传
2017-03-11 上传
2016-03-11 上传
2020-08-26 上传
2021-01-03 上传
weixin_38735782
- 粉丝: 5
- 资源: 979
最新资源
- IEEE 14总线系统Simulink模型开发指南与案例研究
- STLinkV2.J16.S4固件更新与应用指南
- Java并发处理的实用示例分析
- Linux下简化部署与日志查看的Shell脚本工具
- Maven增量编译技术详解及应用示例
- MyEclipse 2021.5.24a最新版本发布
- Indore探索前端代码库使用指南与开发环境搭建
- 电子技术基础数字部分PPT课件第六版康华光
- MySQL 8.0.25版本可视化安装包详细介绍
- 易语言实现主流搜索引擎快速集成
- 使用asyncio-sse包装器实现服务器事件推送简易指南
- Java高级开发工程师面试要点总结
- R语言项目ClearningData-Proj1的数据处理
- VFP成本费用计算系统源码及论文全面解析
- Qt5与C++打造书籍管理系统教程
- React 应用入门:开发、测试及生产部署教程