Android开发之那些好用的数据结构与API(三)

简介: 之前的系列文章 Android开发之那些好用的数据结构与API 和Android开发之那些好用的数据结构与API(二)中,已经介绍了一些,趁热打铁,本次介绍的内容很实用哦~~1、RoundedBitmapDrawableRoundedBitmapDrawable 是 android.support.v4.graphics.drawable 里面的一个类,但是记得一定得是21+以上的版本。

之前的系列文章 Android开发之那些好用的数据结构与APIAndroid开发之那些好用的数据结构与API(二)中,已经介绍了一些,趁热打铁,本次介绍的内容很实用哦~~

1、RoundedBitmapDrawable

RoundedBitmapDrawable 是 android.support.v4.graphics.drawable 里面的一个类,但是记得一定得是21+以上的版本。它是用来创建简单的圆角图片,以前做App时,个人中心经常有个圆角的个人头像,可能大家都会用第三方的库来做,其实在2014年的Google IO大会后Google发布了新的Support lib,其中就有这个类和相应的API,看看最新的Android系统中联系人的圆形头像,就是基于此而做的,API很简单,如下:

ImageView imageView = (ImageView) findViewById(R.id.img);
Resources res = getResources();
// 获取Bitmap图片
Bitmap src = BitmapFactory.decodeResource(res, R.drawable.pic);
// 创建RoundedBitmapDrawable对象
RoundedBitmapDrawable dr = RoundedBitmapDrawableFactory
.create(res, src);
// 设置圆角半径
dr.setCornerRadius(Math.max(src.getWidth(), src.getHeight()) / 2.0f);
// 显示圆角图片
imageView.setImageDrawable(dr); 

原图与效果图:

img_98eebdf22759c809c35a5c6131e6039b.png
原图.png

img_d5076ad26977e70afa8e55112fb9b7dc.png
RoundedBitmapDrawable.png

2、DateUtils

在Android中经常要处理与日期有关的字段,当然可以用Java中的日期处理API,但是Android中也提供了,在android.text.format.DateUtils 类中有如下几个方法,下面以几个简单的案例进行介绍。

(1)格式化时间,比Java自带的要爽得多,麻麻说再也不需要记忆乱七八糟的 yyyy年MM月dd日了

//格式化时间,最后参数设定显示的格式
String date = DateUtils.formatDateTime(MainActivity.this,
System.currentTimeMillis(), DateUtils.FORMAT_SHOW_DATE
                        | DateUtils.FORMAT_SHOW_TIME
                        | DateUtils.FORMAT_SHOW_YEAR
                        | DateUtils.FORMAT_ABBREV_MONTH 
                        | DateUtils.FORMAT_SHOW_WEEKDAY);
tv.setText(date);
img_2f31c2b11273fa33d149b19ceaf3198f.png
formatDateTime.png

(2) 返回相对于当前时间的最大区间表示的字符串:几(分钟,小时,天,周,月,年)前/后。想想微博上那些时间,是不是瞬间觉得简单了~~

CharSequence date = DateUtils.getRelativeTimeSpanString(System
                .currentTimeMillis() + 1000*1000);

tv.setText(date);
img_e99eefb5aee2aa36030a8a2c80f57c38.png
getRelativeTimeSpanString1.png

(3) 返回相对于当前时间的一个时间字符串:在同一天显示时分;在不同一天,显示月日;在不同一年,显示年月日

CharSequence date = DateUtils.getRelativeTimeSpanString(
MainActivity.this, System.currentTimeMillis() + 10000 * 10000);

tv.setText(date);
img_ce3652f7ac1e2d2d0b11add88c548088.png
getRelativeTimeSpanString2.png

(4)返回两个时间值间的相距字符串

String date = DateUtils.formatDateRange(MainActivity.this,
                System.currentTimeMillis(),
                System.currentTimeMillis() + 60 * 60 * 10000,
                DateUtils.FORMAT_SHOW_TIME); 

tv.setText(date);
img_c8a1c7dd40a40f4ec04022c892d54ab1.png
formatDateRange.png

以上就是本次要介绍的内容,内容虽然不是很多,但是很实用,正所谓内容不在多而在精,大家可以在项目中试试看~~

目录
相关文章
|
9月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
10月前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
10月前
|
人工智能 自然语言处理 机器人
使用 API 编程开发扣子应用
扣子(Coze)应用支持通过 API 编程,将 AI 聊天、内容生成、工作流自动化等功能集成至自有系统。主要 API 包括 Bot API(用于消息交互与会话管理)及插件与知识库 API(扩展功能与数据管理)。开发流程包括创建应用、获取密钥、调用 API 并处理响应,支持 Python 等语言。建议加强错误处理、密钥安全与会话管理,提升集成灵活性与应用扩展性。
3091 0
|
9月前
|
API 开发者 数据采集
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
2025反向海淘新机遇:依托代购系统,聚焦小众垂直品类,结合Pandabay数据选品,降本增效。系统实现智能翻译、支付风控、物流优化,助力中式养生茶等品类利润翻倍,新手也能快速入局全球市场。
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
|
10月前
|
数据采集 缓存 API
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
本文详解小红书笔记详情API的开发对接、实战场景与收益模式,涵盖注册避坑、签名生成、数据解析全流程,并分享品牌营销、内容创作、SAAS工具等落地应用,助力开发者高效掘金“种草经济”。
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
|
9月前
|
存储 缓存 算法
淘宝买家秀 API 深度开发:多模态内容解析与合规推荐技术拆解
本文详解淘宝买家秀接口(taobao.reviews.get)的合规调用、数据标准化与智能推荐全链路方案。涵盖权限申请、多模态数据清洗、情感分析、混合推荐模型及缓存优化,助力开发者提升审核效率60%、商品转化率增长28%,实现UGC数据高效变现。
|
9月前
|
存储 缓存 算法
亚马逊 SP-API 深度开发:关键字搜索接口的购物意图挖掘与合规竞品分析
本文深度解析亚马逊SP-API关键字搜索接口的合规调用与商业应用,涵盖意图识别、竞品分析、性能优化全链路。通过COSMO算法解析用户购物意图,结合合规技术方案提升关键词转化率,助力卖家实现数据驱动决策,安全高效优化运营。
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
421 59
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
1117 77
|
编译器 C语言 C++
栈区的非法访问导致的死循环(x64)
这段内容主要分析了一段C语言代码在VS2022中形成死循环的原因,涉及栈区内存布局和数组越界问题。代码中`arr[15]`越界访问,修改了变量`i`的值,导致`for`循环条件始终为真,形成死循环。原因是VS2022栈区从低地址到高地址分配内存,`arr`数组与`i`相邻,`arr[15]`恰好覆盖`i`的地址。而在VS2019中,栈区先分配高地址再分配低地址,因此相同代码表现不同。这说明编译器对栈区内存分配顺序的实现差异会导致程序行为不一致,需避免数组越界以确保代码健壮性。
266 0
栈区的非法访问导致的死循环(x64)