android:一套默认头像的封装
写这个是在项目迭代的时候遇到的,一开始都是圆形的头像,今天突然说~要把所有的头像改成圆角矩形....
我一开始没注意到这个,就把所有有关头像调用的部分整合了一下
如图~
那就不多bb了。直接上代码
这是一个形状的分类
public class HeaderShap {/** 圆形,上下文,文本组件,图片链接* */public void ShapCircle(Context context, TextView tv_default, ImageView iv_avatar, String avatar) {RequestOptions options = RequestOptions.bitmapTransform(new CropCircleTransformation());glide(context,tv_default,iv_avatar,avatar,options);}/** 圆角矩形,上下文,文本组件,图片链接* */public void ShapRounded(Context context, TextView tv_default, ImageView iv_avatar, String avatar) {//RequestOptions options = RequestOptions.bitmapTransform(new RoundedCorners(20));//第一个是上下文,第二个是圆角的弧度RequestOptions options = new RequestOptions().transform(new GlideRoundTransform(context,20));glide(context,tv_default,iv_avatar,avatar,options);}//共同部分的代码封装一下private void glide(Context context, TextView tv_default, ImageView iv_avatar, String avatar,RequestOptions options){Glide.with(context).load(avatar)//.placeholder(R.drawable.ic_default_image).error(R.drawable.default_avatar_background).apply(options).listener(new RequestListener<Drawable>() {@Overridepublic boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {tv_default.setVisibility(View.VISIBLE);return false;}@Overridepublic boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSourcedataSource, boolean isFirstResource) {tv_default.setVisibility(View.INVISIBLE);return false;}}).into(iv_avatar);}/** 标准矩形,上下文,文本组件,图片链接* */public void ShapRectangle(Context context, TextView tv_default, ImageView iv_avatar, String avatar) {RequestOptions options = RequestOptions.bitmapTransform(new RoundedCorners(0));glide(context, tv_default, iv_avatar, avatar, options);}
}
继承glide自定义的样式,不用这个设置矩形的话,会被缩放,显示的不是矩形,会显示成圆角的缩放图,如果原图是长方形,那就是长方行圆角~这么讲能理解吧
public class GlideRoundTransform extends BitmapTransformation {private static float radius = 0f;public GlideRoundTransform(Context context) {this(context, 4);}public GlideRoundTransform(Context context, int dp) {super();this.radius = dp;//this.radius = Resources.getSystem().getDisplayMetrics().density * dp;}@Overrideprotected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {Bitmap bitmap = TransformationUtils.centerCrop(pool, toTransform, outWidth, outHeight);return roundCrop(pool, bitmap);}private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {if (source == null) return null;Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);if (result == null) {result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);}Canvas canvas = new Canvas(result);Paint paint = new Paint();paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));paint.setAntiAlias(true);RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());canvas.drawRoundRect(rectF, radius, radius, paint);return result;}public String getId() {return getClass().getName() + Math.round(radius);}@Overridepublic void updateDiskCacheKey(MessageDigest messageDigest) {}}
默认的圆角图,颜色自己改一下,我是根据主题色来的
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item><shapeandroid:shape="rectangle"><solid android:color="@color/color_theme"/><corners android:radius="10dp"/><strokeandroid:width="0.5dp"android:color="@color/color_theme"/></shape></item></layer-list>
最后就是调用了
第一个参数是上下文,第二个是默认会显示的昵称,第三个是显示图片的控件,第四个是图片地址(如果没有,显示的就是默认的)
HeaderShap shap = new HeaderShap();
shap.ShapRounded(context,tv_udefault_avatar,iv_avatar,avatar);
最后头像的xml也发一下吧,这个其实很简单,imagview显示的是默认,昵称和将要显示的图片都暂时隐藏,没有图片地址的时候,昵称会显示,就和钉钉那种差不多,这篇文章,上半年我是写过,只是没封装,简单使用,各位可以向上翻看一下~
xmlns:tools="http://schemas.android.com/tools"android:id="@+id/ll_avatar"android:background="#00000000"android:layout_width="40dp"android:layout_height="40dp"><LinearLayoutandroid:orientation="vertical"android:layout_width="40dp"android:layout_height="40dp"><TextViewandroid:id="@+id/user_id"android:layout_width="0dp"android:layout_height="0dp"tools:ignore="Suspicious0dp" /><ImageViewandroid:padding="4dp"android:id="@+id/iv_avatar"android:layout_width="match_parent"android:layout_height="match_parent"android:src="@drawable/default_avatar_background"/><TextViewandroid:visibility="invisible"android:id="@+id/tv_default_avatar"android:text="京怀"android:textColor="@color/white"android:textSize="11dp"android:gravity="center"android:layout_marginTop="-40dp"android:layout_width="match_parent"android:layout_height="match_parent"/></LinearLayout>
</LinearLayout>
android:一套默认头像的封装相关推荐
- 封装默认头像组件 - vue3
需求:在用户没有上传头像时,使用-用户名的最后一个字当默认头像 子组件: <template><view class="defaultPic" :style=&q ...
- android contacts电话查询头像,android透过查询电话号码获取联系人头像
android通过查询电话号码获取联系人头像 // 取得Intent中的頭像 ivShowImage = (ImageView) findViewById(R.id.call_log_detail_c ...
- android文件读取工具类,Android 下读取Assets Properties操作封装工具类
Android 下读取Assets Properties操作封装工具类 发布时间:2018-06-03作者:laosun阅读(2081) 为了方便使用,首先创建BaseApplication类,如下所 ...
- android contacts电话查询头像,Androidの通过查询电话号码或ID获取联系人头像
// 取得Intent中的頭像 ivShowImage = (ImageView) findViewById(R.id.call_log_detail_contact_img); //通话电话号码获取 ...
- Android系统开发 默认壁纸的定制 主题风格的开发及定制 DDMS 常用adb 命令 抓取Log
Android系统开发 Android系统本身的功能在增加和完善过程中.在系统开发中如果涉及系统API的改动,则一定要慎重,系统的API的改动可能涉及Android应用程序的不 ...
- 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一)
上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 上篇文章中给大家简单介绍了一些业务,上门洗车APP --- Android客户端开发 前言及业务简介,本篇文章给大家介绍下 ...
- Android m6.0权限问题调用封装utils类 - Permission in Android M
Android m6.0权限问题调用封装utils类 - Permission in Android M 1.概述 安卓平台权限一直有被流氓应用随便利用诟病, android M的发布彻底解决了这一问 ...
- Android实现注册登录头像上传等功能常规开发(Android端,服务器端开发实例)
Android实现注册登录头像上传等功能常规开发(Android端,服务器端开发实例) 标签: 注册登录Android开发servlet 2017-04-18 20:34 454人阅读 评论(1) ...
- Slog42_支配vue框架初阶项目之博客网站-单页-默认头像的布局和定位
ArthurSlog SLog-42 Year·1 Guangzhou·China Aug 19th 2018 GitHub 掘金主页 简书主页 segmentfault 从业之路不同 机缘也不同 人 ...
- 【Android 逆向】应用安装目录 ( Android 应用的默认安装目录 | 查找 Android 应用的安装目录 | 查询当前正在运行的应用包名 | 根据包名查询应用安装路径 )
文章目录 一.Android 应用的默认安装目录 二.查找 Android 应用的安装目录 1.查询当前正在运行的应用包名 2.根据包名查询应用安装路径 一.Android 应用的默认安装目录 应用安 ...
最新文章
- 学院菌喊你来领取年终学习奖状啦~~!!!
- redis 源码 zmalloc.c 实现
- [渝粤教育] 盐城工学院 环境监测与仪器分析 参考 资料
- 力扣刷题【20,21,26,27,35】
- django 1.8 官方文档翻译:14-1 按需内容处理
- 最近一周交易所钱包比特币数量减少18425枚
- 解决Spark集群无法停止
- Yii2修改默认控制器
- linux检查启动与否,关于linux启动的问题。
- 教你在官网如何下载jdk
- 遗传算法原理及其python实现
- TeeChart 2022.2 for .NET
- autoCAD 向图形中添加文字
- android 代码中切换输入法,在Android系统中切换输入法的相关教程
- php 开启opcode,php 开启 opcode 测试
- oracle11g-R2数据库的逻辑备份
- 【复杂句的逻辑练习题】规则变化的过去分词
- 12:C语言之小球自由落体运动
- 无套路送9部 kindle,价值5400元
- Yocto系列讲解[技巧篇]47 - bb文件中如何获取源码或指定本地目录
热门文章
- python判断按键是否按下_Pygame检测是否按下了一个键?
- 网易的java开发_网易微专业java开发工程师2021
- redis存储新闻列表_聊聊Redis使用场景
- C#编程,获取当前时间为一年的第几周的一种方法。
- 澳洲计算机专业几年,澳洲计算机硕士几年
- python敏感字替换_python如何实现敏感词替换
- redis.clients.jedis.exceptions.JedisDataException
- 删除Chrome浏览器网站地址栏以前的搜索记录
- 26岁程序员猝死,再次提醒:有几个前兆其实很显眼
- 【View基础知识】TouchSlop、VelocityTracker、GestureDetector、Scroller