如果我的应用程序的最小目标SDK设置为4,则所有对Drawable.createFromStream的调用都会调整图像大小。
e.g。如果源图像宽度为480px且运行我的应用程序的Android设备的密度为1.5,则以下代码返回宽度为320的BitmapDrawable
URL url = new URL("http://www.examples.com/something.png");
Drawable d = Drawable.createFromStream(url.openStream(), "something.png");
是否有方法强制它不变或指定比例(ldpi / mdpi / hdpi etC)从InputStream返回图像?
编辑:来自下方的解决方案。
Bitmap b = BitmapFactory.decodeStream(inputStream);
b.setDensity(Bitmap.DENSITY_NONE);
Drawable d = new BitmapDrawable(b);
答案 0 :(得分:11)
您可以将图片加载为位图。这样它的大小就不会改变。
BitmapFactory.decodeStream(...)
或者您可以尝试BitmapDrawable(InputStream is)
构造函数。它已被弃用,但我想它应该可以胜任。
答案 1 :(得分:2)
从ImageView适配器中的本地资源加载图像
我被Koushik Dutta的OOM错误所困,因为从资源文件夹中加载了2张图像。即使他提到它可能会发生,因为它们不是数据流。并建议将它们加载为InputStream。
我放弃了离子库,因为我只需要来自当地的4张图片。
这是使用简单ImageView的解决方案。
在RecyclerViewAdapter /或任何
中<!DOCTYPE HTML>
<html>
<head>
<title>
Scroll upto Div with jQuery.
</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script>
$(document).ready(function () {
$("#button1").click(function () {
var x = $("#element").position(); //gets the position of the div element...
window.scrollTo(x.left, x.top); //window.scrollTo() scrolls the page upto certain position....
//it takes 2 parameters : (x axis cordinate, y axis cordinate);
});
});
</script>
</head>
<body>
<button id="button1">
Click here to scroll
</button>
<div id="element" style="position:absolute;top:200%;left:0%;background-color:orange;height:100px;width:200px;">
The DIV element.
</div>
</body>
</html>
虽然 Drawable d = new BitmapDrawable(b); 已弃用,但工作做得很好。
所以我们可以直接通过这一行从InputStream中获取drawable。
InputStream inputStream = mContext.getResources().openRawResource(R.drawable.your_id);
Bitmap b = BitmapFactory.decodeStream(inputStream);
b.setDensity(Bitmap.DENSITY_NONE);
Drawable d = new BitmapDrawable(b);
holder.mImageView.setImageDrawable(d);
希望它有所帮助。
答案 2 :(得分:1)
经过很长一段时间,我遇到了以下解决方案。有用。它从locallink的文件中检索创建位图。
private Drawable getDrawableForStore(String localLink) {
Bitmap thumbnail = null;
try {
File filePath = this.getFileStreamPath(localLink);
FileInputStream fi = new FileInputStream(filePath);
thumbnail = BitmapFactory.decodeStream(fi);
} catch (Exception ex) {
Log.e("getThumbnail() on internal storage", ex.getMessage());
return null;
}
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
float scaledDensity = metrics.density;
int width = thumbnail.getWidth();
int height = thumbnail.getHeight();
if(scaledDensity<1){
width = (int) (width *scaledDensity);
height = (int) (height *scaledDensity);
}else{
width = (int) (width +width *(scaledDensity-1));
height = (int) (height +height *(scaledDensity-1));
}
thumbnail = Bitmap.createScaledBitmap(thumbnail, width, height, true);
Drawable d = new BitmapDrawable(getResources(),thumbnail);
return d;
}