前言:
因为项目中显示图片是用Picasso,设置placeholder和error图片的时候发现,本地图片的大小无法满足我的需求,需要先对图片大小改变再显示。
Picasso的placeholder和error的参数也只有int resIdDrawable drawable
于是打算将改变过大小的Drawable传进入显示,咦,效果很满意!

开心

整个过程的思路:

  1. 将本地图片(R.drawable.image)变成Drawable对象
  2. 将Drawable对象转换成Bitmap对象
  3. 将Bitmap对象根据指定大小创建一个新的Bitmap对象
  4. 将Bitmap对象转换成Drawable对象

代码:

1. 将本地图片(R.drawable.image)变成Drawable对象

Drawable drawable = ContextCompat.getDrawable(context, R.drawable.image);

2. 将Drawable对象转换成Bitmap对象

/*** 将Drawable转换为Bitmap* @param drawable* @return*/
private Bitmap drawableToBitmap(Drawable drawable) {//取drawable的宽高int width = drawable.getIntrinsicWidth();int height = drawable.getIntrinsicHeight();//取drawable的颜色格式Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565;//创建对应的bitmapBitmap bitmap = Bitmap.createBitmap(width, height, config);//创建对应的bitmap的画布Canvas canvas = new Canvas(bitmap);drawable.setBounds(0, 0, width, height);//把drawable内容画到画布中drawable.draw(canvas);return bitmap;
}

3. 整个流程的执行

后来发现一个更简洁的方法

/*** 将本地资源图片大小缩放* @param resId* @param w* @param h* @return*/public Drawable zoomImage(int resId, int w, int h){Resources res = mContext.getResources();Bitmap oldBmp = BitmapFactory.decodeResource(res, resId);Bitmap newBmp = Bitmap.createScaledBitmap(oldBmp,w, h, true);Drawable drawable = new BitmapDrawable(res, newBmp);return drawable;
}

原来复杂的思路

/*** 缩放Drawable*@drawable 原来的Drawable*@w 指定的宽*@h 指定的高*/
public Drawable zoomDrawable(Drawable drawable, int w, int h){//获取原来Drawable的宽高int width = drawable.getIntrinsicWidth();int height = drawable.getIntrinsicHeight();//将Drawable转换成BitmapBitmap oldbmp = drawableToBitmap(drawable);//计算scaleMatrix matrix = new Matrix();float scaleWidth = ((float)w/width);float scaleHeight = ((float)h/height);matrix.postScale(scaleWidth, scaleHeight);//生成新的BitmapBitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height, matrix, true);//设置bitmap转成drawable后尺寸不变 //这个很关键后面解释!!DisplayMetrics metrics = new DisplayMetrics();manager.getDefaultDisplay().getMetrics(metrics);Resources resources = new Resources(mContext.getAssets(), metrics, null);return new BitmapDrawable(resources, newbmp);
}

学习中遇到的问题

看网上的教程是没有下面

DisplayMetrics metrics = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(metrics);
Resources resources = new Resources(mContext.getAssets(), metrics, null);

这段代码的。
假如我指定的宽高是200,生成的Drawable的宽高却只有100。

原来Bitmap转换成Drawable的尺寸是会变小的。

那段代码就能解决尺寸变小的问题。
如果路过的大神有更好的方法,希望能指点一下小白。


好好学习,天天向上。<( ̄oo, ̄)/

Potato_zero.jpg

作者:欢乐的乐
链接:https://www.jianshu.com/p/d3ff021b7fec
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Android 将本地资源图片转换成Drawable,进行设置大小相关推荐

  1. android 获取drawable 对象,Android 实现将本地资源图片转换成Drawable的方法

    Android 实现将本地资源图片转换成Drawable的方法 发布时间:2020-11-06 16:37:09 来源:亿速云 阅读:255 作者:Leah 这篇文章将为大家详细讲解有关Android ...

  2. Android app本地图片转换成Drawable对象的方法

    app开发中把app的res下drawable的图片转换成drawable对象 也是常有的功能 下面就记录下两种转换的方法 第一种 方法 借助ContextCompat 转换方法 Drawable d ...

  3. Flutter: 把本地相册图片转换成Base64的方法

    前言 在Flutter开发中,关于图片上传和展示也是常用必用的操作,尤其是在设置APP用户的头像信息,以及上传背景图的操作.关于Flutter开发中图片的上传和展示也是比较常用的操作,也有对应的组件和 ...

  4. Android 将drawable下的图片转换成bitmap、Drawable

    将drawable下的图片转换成bitmap 1. Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.xx ...

  5. C#将image中的显示的图片转换成二进制

    原文:C#将image中的显示的图片转换成二进制 1.将Image图像文件存入到数据库中 我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才 ...

  6. python矩阵变成图片_Python图片转换成矩阵,矩阵数据转换成图片

    # coding=gbk from PIL import Image import numpy as np # import scipy def loadImage(): # 读取图片 im = Im ...

  7. java图片转换成base64_Java将图片转换成Base64字符串

    public classImageUtil {/*** 本地图片转换成base64字符串 *@paramimgFile * 图片本地路径 *@return */ public static Strin ...

  8. html本地路径图片转成base64,canvas-toDataURL()将图片转为dataURL(base64)

    将图片转为base64的好处 将图片转换为Base64编码,可以让你很方便地在没有上传文件的条件下将图片插入其它的网页.编辑器中. 这对于一些小的图片是极为方便的,因为你不需要再去寻找一个保存图片的地 ...

  9. 中如何将方形图片转换成圆形图片_【PS】PS中不可不知的实用技巧!你都掌握了吗?...

    今天给大家分享一些在PS中经常用到的实用小技巧,操作简单易上手. 01 拉伸图片人物不变形 在我们在PS里想要拉伸一些图片时,里面的人物往往会跟着一起变形,那么如何改变图片比例的同时,又不影响人物的形 ...

最新文章

  1. html动态加载js方法,如何通过JavaScript动态加载js
  2. APUE读书笔记-16网络通信-08非阻塞和异步IO
  3. 12.C++:strtol() 字符串转长整型函数
  4. JSP——JSTL语法总结
  5. 安装新版Magisk卡在启动页面等问题以及解决办法
  6. 【渝粤教育】国家开放大学2018年春季 0692-22T化工设备机械基础 参考试题
  7. mysql 查询索引
  8. [转]链接中 href='#' 和 href='###' 的区别以及优缺点
  9. Blog说明--WaaSinn的专业窝
  10. Java后台调用API的方法
  11. 服务器装系统就蓝屏,重装了下系统老是蓝屏
  12. pppoe服务器账号和密码是什么,小米路由器pppoe账号密码是什么你知道吗
  13. 高等数学知识框架梳理
  14. PHP字符串函数strrchr(查找指定字符在字符串中的最后一次出现)
  15. Node.js七天搞定微信公众号(又名:Koa2实现电影微信公众号前后端开发)
  16. Selenium模拟浏览器访问
  17. 【备忘】真.护眼色 数值
  18. html 移动互联网终端的javascript touch事件,touchstart, touchend, touchmove
  19. (3) 理解ConvLSTM
  20. ArcFace/InsightFace使用自己数据训练/验证过程(1)

热门文章

  1. mac安装Homebrew报443
  2. qt creator在高分辨率笔记本上控件运行显示不全的问题解决方法
  3. Linux系统进程调度——调度架构详细分析
  4. 小鲲Python嘎嘎炫~day1.4
  5. 加拿大综合类大学排名获关注,盘点高校对雅思要求
  6. Flutter强制某个页面横屏
  7. 高效工具推荐:技术人员必备的3个知识收藏工具(浏览器插件)
  8. 马太效应(Matthew Effect)
  9. 如何实现Shell脚本开机自运行
  10. 无情刀永不知错,无缘分只叹奈何