Android 将本地资源图片转换成Drawable,进行设置大小
前言:
因为项目中显示图片是用Picasso,设置placeholder和error图片的时候发现,本地图片的大小无法满足我的需求,需要先对图片大小改变再显示。
Picasso的placeholder和error的参数也只有int resId和Drawable drawable
于是打算将改变过大小的Drawable传进入显示,咦,效果很满意!
开心
整个过程的思路:
- 将本地图片(R.drawable.image)变成Drawable对象
- 将Drawable对象转换成Bitmap对象
- 将Bitmap对象根据指定大小创建一个新的Bitmap对象
- 将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,进行设置大小相关推荐
- android 获取drawable 对象,Android 实现将本地资源图片转换成Drawable的方法
Android 实现将本地资源图片转换成Drawable的方法 发布时间:2020-11-06 16:37:09 来源:亿速云 阅读:255 作者:Leah 这篇文章将为大家详细讲解有关Android ...
- Android app本地图片转换成Drawable对象的方法
app开发中把app的res下drawable的图片转换成drawable对象 也是常有的功能 下面就记录下两种转换的方法 第一种 方法 借助ContextCompat 转换方法 Drawable d ...
- Flutter: 把本地相册图片转换成Base64的方法
前言 在Flutter开发中,关于图片上传和展示也是常用必用的操作,尤其是在设置APP用户的头像信息,以及上传背景图的操作.关于Flutter开发中图片的上传和展示也是比较常用的操作,也有对应的组件和 ...
- Android 将drawable下的图片转换成bitmap、Drawable
将drawable下的图片转换成bitmap 1. Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.xx ...
- C#将image中的显示的图片转换成二进制
原文:C#将image中的显示的图片转换成二进制 1.将Image图像文件存入到数据库中 我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才 ...
- python矩阵变成图片_Python图片转换成矩阵,矩阵数据转换成图片
# coding=gbk from PIL import Image import numpy as np # import scipy def loadImage(): # 读取图片 im = Im ...
- java图片转换成base64_Java将图片转换成Base64字符串
public classImageUtil {/*** 本地图片转换成base64字符串 *@paramimgFile * 图片本地路径 *@return */ public static Strin ...
- html本地路径图片转成base64,canvas-toDataURL()将图片转为dataURL(base64)
将图片转为base64的好处 将图片转换为Base64编码,可以让你很方便地在没有上传文件的条件下将图片插入其它的网页.编辑器中. 这对于一些小的图片是极为方便的,因为你不需要再去寻找一个保存图片的地 ...
- 中如何将方形图片转换成圆形图片_【PS】PS中不可不知的实用技巧!你都掌握了吗?...
今天给大家分享一些在PS中经常用到的实用小技巧,操作简单易上手. 01 拉伸图片人物不变形 在我们在PS里想要拉伸一些图片时,里面的人物往往会跟着一起变形,那么如何改变图片比例的同时,又不影响人物的形 ...
最新文章
- html动态加载js方法,如何通过JavaScript动态加载js
- APUE读书笔记-16网络通信-08非阻塞和异步IO
- 12.C++:strtol() 字符串转长整型函数
- JSP——JSTL语法总结
- 安装新版Magisk卡在启动页面等问题以及解决办法
- 【渝粤教育】国家开放大学2018年春季 0692-22T化工设备机械基础 参考试题
- mysql 查询索引
- [转]链接中 href='#' 和 href='###' 的区别以及优缺点
- Blog说明--WaaSinn的专业窝
- Java后台调用API的方法
- 服务器装系统就蓝屏,重装了下系统老是蓝屏
- pppoe服务器账号和密码是什么,小米路由器pppoe账号密码是什么你知道吗
- 高等数学知识框架梳理
- PHP字符串函数strrchr(查找指定字符在字符串中的最后一次出现)
- Node.js七天搞定微信公众号(又名:Koa2实现电影微信公众号前后端开发)
- Selenium模拟浏览器访问
- 【备忘】真.护眼色 数值
- html 移动互联网终端的javascript touch事件,touchstart, touchend, touchmove
- (3) 理解ConvLSTM
- ArcFace/InsightFace使用自己数据训练/验证过程(1)