更改图像时更改ImageView大小

时间:2014-01-08 20:29:02

标签: android android-imageview scale

我遇到的问题是我的布局有ImageView。使用AsyncTask我从网络加载图片。这是一张全景图。如果我启动Fragment,我加载src="@drawable/pano"的图片就会完美显示。它有完整的高度,我可以滚动浏览全景。

只要将新图像加载到ImageView图像视图重新缩放,以便高度为:

在AsyncTask之前(图像是从drawables加载的......):

before

这是在AsyncTask加载图像之后: after

这是我的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或者我是否需要在加载后再次设置它一个新的形象?

2 个答案:

答案 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);