android drawable 在res下 和在sdcard下得到图片大小 不一样怎么办?(已经解决)

最近在写IM软件 碰到一个问题 , 就是获取一张drawable  在res drawable目录下的 图片 和 在 sdcard 中获取的图片大小 总是不一样

 drawable中 图片密度为 本机密度 而 sdcard中获取到的drawable 为默认的160 太伤不起了,而且在sdcard目录下 得到 的bitmap是不改变的 找了很多方法 又看了N多源码

终于解决了


想在sdcard目录中的图片与drawable的图片大小一致 可以这样做:

1、得到资源目录下的drawable

BitmapDrawable drawable = (BitmapDrawable) getResources().getDrawable(R.drawable.test);

2、得到这个drawable的宽高

int w = drawable.getIntrinsicWidth();
int h = drawable.getIntrinsicHeight();

3、得到sdcard下目录的bitmap 

Bitmap bitmap = Bitmap.createScaledBitmap(BitmapFactory.decodeFile(testUrl), w, h, true);

// Bitmap.createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter) 这个方法就是核心方法  设置createScaledBitmap filter 为true 即可变位图

4、将bitmap转换成drawable

BitmapDrawable drawable =new BitmapDrawable(getResources() , bitmap);

5、将drawable的密度设置为本机密度 即:
drawable.setTargetDensity(getResources().getDisplayMetrics());

到此:大功告成 。

两张图片的的大小就一致了!


                                                  ------------  author by wsc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值