gpt4 book ai didi

android - 调整图像大小并设置 CompoundDrawablesWithIntrinsicBounds

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:44 24 4
gpt4 key购买 nike

我的应用包含带有图像的按钮,使用 setCompoundDrawablesWithIntrinsicBounds 进行设置。我使用应用程序的 drawables 文件夹中的图像,但也使用从网络下载并存储在 SD 卡上的图像。我发现我需要放大 SD 卡图像,以便它们呈现为与 drawables 中的图像相同的大小。我这样做使用:

    Options opts = new BitmapFactory.Options();

opts.inDensity = 160;
Bitmap bm = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() +
context.getResources().getString(R.string.savefolder) + iconfile, opts);

myIcon = new BitmapDrawable(context.getResources(), bm);
btn.setCompoundDrawablesWithIntrinsicBounds(myIcon, null, null, null );

这一直没有问题,直到我将手机更新到 Android 4.1.1 并注意到下载的图像现在显示的尺寸比可绘制文件夹中的图像小得多。

我搞乱了 inDensity 值,但收效甚微,但在根据 btnheight 值(只是图像按钮的高度)缩放位图方面取得了更大的成功坐在):

    int intoffset=bm.getHeight() - bm.getWidth();                   
myIcon = new BitmapDrawable(context.getResources(),
Bitmap.createScaledBitmap(bm, btnheight - (((btnheight/100)*10) +
intoffset) , btnheight - ((btnheight/100)*10), true));

这种方法可行,但图像仍然比它所在的按钮大一点(根据上述情况,情况不应该如此,因为它应该将图像高度缩放到按钮高度的 90% .) 我这样做是为了测试。我无法在我的应用程序中使用此方法,因为按钮高度会根据按钮上显示的字体大小而变化,并且用户可以在应用程序首选项中更改此字体大小。

顺便说一句,我发现,奇怪的是(?),通过使用

将位图缩放到原始高度的两倍
   Bitmap.createScaledBitmap(bm, bm.getWidth() * 2
, bm.getHeight() * 2, true));

它在 4.0.3 和 4.1.1 中正确呈现(好吧,它以与可绘制图标相同的大小显示),但在 2.1 中表现得像你期望的那样(呈现得比它所在的按钮大) .

如果有人对 4.1.1 中发生这种情况的原因有任何见解,以及我可以做什么,我的 decodeFile 位图以与我的可绘制位图相同的大小呈现,而无需单独为 4.1.1 编码,它会是非常感谢!

最佳答案

将我的原始代码修改为如下所示适用于 4.1.1 以及我测试它的先前版本......

   Options opts = new BitmapFactory.Options();

DisplayMetrics dm = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(dm);

int dpiClassification = dm.densityDpi;

opts.inDensity = dm.DENSITY_MEDIUM;

opts.inTargetDensity = dpiClassification;
opts.inScaled =true;

Bitmap bm = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() +
context.getResources().getString(R.string.savefolder) + iconfile, opts);

myIcon = new BitmapDrawable(context.getResources(), bm);
btn.setCompoundDrawablesWithIntrinsicBounds(myIcon, null, null, null );

关于android - 调整图像大小并设置 CompoundDrawablesWithIntrinsicBounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14430893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com