我遇到的问题是我的布局有ImageView
。使用AsyncTask
我从网络加载图片。这是一张全景图。如果我启动Fragment
,我加载src="@drawable/pano"
的图片就会完美显示。它有完整的高度,我可以滚动浏览全景。
只要将新图像加载到ImageView
图像视图重新缩放,以便高度为:
在AsyncTask之前(图像是从drawables加载的......):
这是在AsyncTask加载图像之后:
这是我的xml文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:overScrollMode="never"
android:scrollbars="none" >
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/img1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentTop="true"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:src="@drawable/pano" />
</RelativeLayout>
</HorizontalScrollView>
AsyncTask代码:
public class DownloadPanorama extends
AsyncTask<ImageView, Void, Bitmap> {
ImageView imageView;
Bitmap bm;
public DownloadPanorama(ImageView mChart) {
imageView = mChart;
}
@Override
protected Bitmap doInBackground(ImageView... imageViews) {
return download_Image((String) imageView.getTag());
}
@Override
protected void onPostExecute(Bitmap result) {
imageView.setImageBitmap(result);
}
private Bitmap download_Image(String url) {
Bitmap bm = null;
try {
URL aURL = new URL(url);
URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
return bm;
}
}
当不使用AsyncTask并且仅使用原始setImageBitmap时也会发生...所以我不知道是否必须更改我的xml文件中的scaleType
或者我是否需要在加载后再次设置它一个新的形象?
答案 0 :(得分:0)
修改强>
听起来您的评论和更新的问题,您知道您希望图像的大小(1200x400)。你有两件事可以做到这个尺寸。第一个,也是推荐的,是替换
行bm = BitmapFactory.decodeStream(bis);
与
BitmapFactory.Options options = new BitmapFactory.Options();
options.outWidth=1200;
options.outHeight=400;
bm = BitmapFactory.decodeStream(bis, new Rect(0,0,0,0), options);
另一个选项是更改View界限。在上面的评论中,听起来边界可能会发生变化,因此每次加载不同大小的新图像时都必须重复此操作:
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) imageView.getLayoutParams();
params.width = 1200;
params.height = 400;
imageView.setLayoutParams(params);
<德尔>
你需要改变
机器人:adjustViewBounds = “真”
至
机器人:adjustViewBounds = “假”
德尔>
答案 1 :(得分:0)
我会尝试改变:
android:layout_height="wrap_content"
到
android:layout_height="fill_parent"
在你的ImageView中。
如果这不起作用,您可以缩放位图:
myBitmap = Bitmap.createScaledBitmap(myBitmap, width, height,true);