我正在尝试拉伸我用凌空加载的图像。 XML没有多大帮助,虽然它可以缩小它们但它无助于扩大它们。我对这个主题的探索使我得出结论,这只能通过编程方式实现。
我的想法是什么?
要扩展凌空库并覆盖其中一个方法,请在下载后立即调整位图大小。
我使用此代码调整手机上已有的图片大小,但这对我的互联网随机图片没有多大帮助。
Point outSize=new Point();
float destWidth=1;
float destHeight=1;
@SuppressWarnings("deprecation")
@TargetApi(13)
private Bitmap scaleBitmap(int mFile){
Display display = getActivity().getWindowManager().getDefaultDisplay();
if (android.os.Build.VERSION.SDK_INT >= 13){
display.getSize(outSize);
destWidth = outSize.x;
destHeight = outSize.y;
}else{
destWidth=display.getWidth();
destWidth=display.getHeight();
}
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap orig = BitmapFactory.decodeResource(getResources(), mFile);
float srcWidth = orig.getWidth();
float srcHeight = orig.getHeight();
float inSampleSize = 1;
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
inSampleSize=(destHeight/2)/srcHeight;
}else{
inSampleSize=(destHeight/4)/srcHeight;}
options = new BitmapFactory.Options();
Bitmap resized=Bitmap.createScaledBitmap(orig, (int)Math.round(orig.getWidth()*inSampleSize), (int)Math.round(orig.getHeight()*inSampleSize), true);
destWidth=1;
destHeight=1;
return resized;
}
基本上我想为orig分配下载的图像,然后调整大小然后显示它。 我的问题是:我会延伸什么课?我看了一眼,但由于我没有经验,我无法弄清楚到底要找什么。是ImageLoader吗?更具体地说:我应该覆盖getBitmap()方法并添加编辑版本的代码以进行缩放吗?
免责声明:我非常缺乏经验,我也接受其他想法。
答案 0 :(得分:0)
我认为您所看到的问题是由 NetworkImageView 的基础代码的默认行为引起的。
查看 NetworkImageView 使用的 ImageRequest 的代码。有一个名为 getResizedDimension 的函数,它表示类似"缩放矩形的一边以适应宽高比" 。这可能会导致您的问题,因为您下载的图像可能无法为每个特定设备计算完美的宽高比。
您是在网格中显示单个图像还是图像?如果它只是一个图像,可能会有一个解决方法。我还没有看到你的完整代码,你在哪里设置图片或图片网址,所以我将假设这里有流程:
1。)使用常规ImageView。
2。)使用指向图像网址
的常规排球请求3。)当你收到响应(parseNetworkResponse)时,使用上面提到的适合你的方法自己解码(字节数组)。有关如何操作的一些提示也可以在此处找到:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
4。)解码后,以解码结果编程设置ImageView的位图
如果这是一个网格类型的东西,那么你可能需要制作自己的NetworkImageView版本及其底层支持类(子类)。
<强>建议:强>
如果您可以自由选择图书馆,也可以查看Picasso。看起来非常简单,可以满足您的需求。
答案 1 :(得分:0)
我几天前解决了。以下是常规ImageView处理图像大小调整的方法:如果您使用Match_parent作为宽度并使用wrap_content作为高度(我使用match_parent进行测试且结果相同),如果图片的高度较低,则不会缩放图像比宽度(这是非常典型的)。意味着图像视图基于较小的一侧进行缩放。这意味着有两种解决方案:
以下是我使用的代码:
Display display = getActivity().getWindowManager().getDefaultDisplay();
Point outSize=new Point();
int destWidth;
if (android.os.Build.VERSION.SDK_INT >= 13){
display.getSize(outSize);
destWidth = outSize.x;
}else{
destWidth=display.getWidth();
}
img.setLayoutParams(new RelativeLayout.LayoutParams( LayoutParams.MATCH_PARENT,destWidth*5625/10000));
在我的情况下,我需要适合640x360图像,所以我使用的比率为0,5625。如果您不知道图片的参数,这个方法将起作用但是您必须事先获得参数并将它们放到位,所以我想使用第一个策略可能更有用,但是因为我解决了我的问题所以我没有有一个第一种方法的例子。