写这个是在项目迭代的时候遇到的,一开始都是圆形的头像,今天突然说~要把所有的头像改成圆角矩形....

我一开始没注意到这个,就把所有有关头像调用的部分整合了一下

如图~

那就不多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:一套默认头像的封装相关推荐

  1. 封装默认头像组件 - vue3

    需求:在用户没有上传头像时,使用-用户名的最后一个字当默认头像 子组件: <template><view class="defaultPic" :style=&q ...

  2. android contacts电话查询头像,android透过查询电话号码获取联系人头像

    android通过查询电话号码获取联系人头像 // 取得Intent中的頭像 ivShowImage = (ImageView) findViewById(R.id.call_log_detail_c ...

  3. android文件读取工具类,Android 下读取Assets Properties操作封装工具类

    Android 下读取Assets Properties操作封装工具类 发布时间:2018-06-03作者:laosun阅读(2081) 为了方便使用,首先创建BaseApplication类,如下所 ...

  4. android contacts电话查询头像,Androidの通过查询电话号码或ID获取联系人头像

    // 取得Intent中的頭像 ivShowImage = (ImageView) findViewById(R.id.call_log_detail_contact_img); //通话电话号码获取 ...

  5. Android系统开发 默认壁纸的定制 主题风格的开发及定制 DDMS 常用adb 命令 抓取Log

    Android系统开发             Android系统本身的功能在增加和完善过程中.在系统开发中如果涉及系统API的改动,则一定要慎重,系统的API的改动可能涉及Android应用程序的不 ...

  6. 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一)

    上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 上篇文章中给大家简单介绍了一些业务,上门洗车APP --- Android客户端开发 前言及业务简介,本篇文章给大家介绍下 ...

  7. Android m6.0权限问题调用封装utils类 - Permission in Android M

    Android m6.0权限问题调用封装utils类 - Permission in Android M 1.概述 安卓平台权限一直有被流氓应用随便利用诟病, android M的发布彻底解决了这一问 ...

  8. Android实现注册登录头像上传等功能常规开发(Android端,服务器端开发实例)

    Android实现注册登录头像上传等功能常规开发(Android端,服务器端开发实例) 标签: 注册登录Android开发servlet 2017-04-18 20:34  454人阅读  评论(1) ...

  9. Slog42_支配vue框架初阶项目之博客网站-单页-默认头像的布局和定位

    ArthurSlog SLog-42 Year·1 Guangzhou·China Aug 19th 2018 GitHub 掘金主页 简书主页 segmentfault 从业之路不同 机缘也不同 人 ...

  10. 【Android 逆向】应用安装目录 ( Android 应用的默认安装目录 | 查找 Android 应用的安装目录 | 查询当前正在运行的应用包名 | 根据包名查询应用安装路径 )

    文章目录 一.Android 应用的默认安装目录 二.查找 Android 应用的安装目录 1.查询当前正在运行的应用包名 2.根据包名查询应用安装路径 一.Android 应用的默认安装目录 应用安 ...

最新文章

  1. 学院菌喊你来领取年终学习奖状啦~~!!!
  2. redis 源码 zmalloc.c 实现
  3. [渝粤教育] 盐城工学院 环境监测与仪器分析 参考 资料
  4. 力扣刷题【20,21,26,27,35】
  5. django 1.8 官方文档翻译:14-1 按需内容处理
  6. 最近一周交易所钱包比特币数量减少18425枚
  7. 解决Spark集群无法停止
  8. Yii2修改默认控制器
  9. linux检查启动与否,关于linux启动的问题。
  10. 教你在官网如何下载jdk
  11. 遗传算法原理及其python实现
  12. TeeChart 2022.2 for .NET
  13. autoCAD 向图形中添加文字
  14. android 代码中切换输入法,在Android系统中切换输入法的相关教程
  15. php 开启opcode,php 开启 opcode 测试
  16. oracle11g-R2数据库的逻辑备份
  17. 【复杂句的逻辑练习题】规则变化的过去分词
  18. 12:C语言之小球自由落体运动
  19. 无套路送9部 kindle,价值5400元
  20. Yocto系列讲解[技巧篇]47 - bb文件中如何获取源码或指定本地目录

热门文章

  1. python判断按键是否按下_Pygame检测是否按下了一个键?
  2. 网易的java开发_网易微专业java开发工程师2021
  3. redis存储新闻列表_聊聊Redis使用场景
  4. C#编程,获取当前时间为一年的第几周的一种方法。
  5. 澳洲计算机专业几年,澳洲计算机硕士几年
  6. python敏感字替换_python如何实现敏感词替换
  7. redis.clients.jedis.exceptions.JedisDataException
  8. 删除Chrome浏览器网站地址栏以前的搜索记录
  9. 26岁程序员猝死,再次提醒:有几个前兆其实很显眼
  10. 【View基础知识】TouchSlop、VelocityTracker、GestureDetector、Scroller