要的是这四张全部铺满各自的imageview,可是异步加载出来怎么也不能铺满【原图的大小绝对是可以满足这单个的大小的】
布局文件如下:<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal" >        <LinearLayout
            android:id="@+id/lin1"
            android:layout_width="263px"
            android:layout_height="fill_parent"
            android:orientation="vertical" >            <ImageView
                android:id="@+id/show_item1"
                android:layout_width="263px"
                android:layout_height="372px"
                android:background="@color/white"/>
                        <ImageView
                android:id="@+id/show_item3"
                android:layout_width="263px"
                android:layout_height="fill_parent"
                android:layout_marginTop="4px"
                android:background="@color/white"/>
        </LinearLayout>        <LinearLayout
            android:layout_width="214px"
            android:layout_height="fill_parent"
            android:layout_marginLeft="4px"
            android:orientation="vertical">            <ImageView
                android:id="@+id/show_item2"
                android:layout_width="214px"
                android:layout_height="411px" 
                android:background="@color/white"/>            <ImageView
                android:layout_marginTop="4px"
                android:id="@+id/show_item4"
                android:layout_width="214px"
                android:layout_height="fill_parent"
                android:background="@color/white"/>
        </LinearLayout>
    </LinearLayout></LinearLayout>
调用  
imageloader.DisplayImage(map.get("img1").toString(), img1);
imageloader.DisplayImage(map.get("img2").toString(), img2);
imageloader.DisplayImage(map.get("img3").toString(), img3);
imageloader.DisplayImage(map.get("img4").toString(), img4);imageloader类如下:package com.android.diy.client.utils.imageloader;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collections;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.ImageView;import com.android.diy.client.activity.R;public class ImageLoader {
     MemoryCache memoryCache = new MemoryCache();
    FileCache fileCache;
    private Map<ImageView, String> imageViews = Collections.synchronizedMap(new WeakHashMap<ImageView, String>());
    Context context;
    // 线程池
    ExecutorService executorService;
    public ImageLoader(Context context) {
            fileCache = new FileCache(context);
            this.context=context;
            executorService = Executors.newFixedThreadPool(5);    }
    public void DisplayImage(String url, ImageView imageView) {
            imageViews.put(imageView, url);
            Bitmap bitmap = memoryCache.get(url);
            if (bitmap != null)
               imageView.setImageBitmap(bitmap);
            else {
                queuePhoto(url, imageView);
            }    }
    private void queuePhoto(String url, ImageView imageView) {
            PhotoToLoad p = new PhotoToLoad(url, imageView);
            executorService.submit(new PhotosLoader(p));    }
    public Bitmap getBitmap(String url) {
            File f = fileCache.getFile(url);
            // 先从文件缓存中查找是否有
            Bitmap b = decodeFile(f);
            if (b != null)
                    return b;
            // 最后从指定的url中下载图片
            try {
                    Bitmap bitmap = null;
                    URL imageUrl = new URL(url);
                    HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
                    conn.setConnectTimeout(30000);
                    conn.setReadTimeout(30000);
                    conn.setInstanceFollowRedirects(true);
                    try {
                        InputStream is = conn.getInputStream();
                        OutputStream os = new FileOutputStream(f);
                        CopyStream(is, os);
                        os.close();
                        bitmap = decodeFile(f);
} catch (Exception e) {
   bitmap=BitmapFactory.decodeResource(context.getResources(), R.drawable.deafult); }
                    return bitmap;
            } catch (Exception ex) {                    ex.printStackTrace();                    return null;            }    }
    // decode这个图片并且按比例缩放以减少内存消耗,虚拟机对每张图片的缓存大小也是有限制的
    private Bitmap decodeFile(File f) {
            try {
                    BitmapFactory.Options o = new BitmapFactory.Options();
//                    o.inJustDecodeBounds = true;
//                    BitmapFactory.decodeStream(new FileInputStream(f), null, o);
//                    final int REQUIRED_SIZE = 70;
//                    int width_tmp = o.outWidth, height_tmp = o.outHeight;
//                    int scale = 1;
//                    while (true) {
//                            if (width_tmp / 2 < REQUIRED_SIZE
//                                            || height_tmp / 2 < REQUIRED_SIZE)
//                                    break;
//                            width_tmp /= 2;
//                            height_tmp /= 2;
//                            scale *= 2;
//
//                    }
                    // decode with inSampleSize//                    BitmapFactory.Options o2 = new BitmapFactory.Options();//                    o2.inSampleSize = scale;//                    return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
                    return BitmapFactory.decodeStream(new FileInputStream(f), null, o);            } catch (FileNotFoundException e) {            }            return null;    }
    // Task for the queue    private class PhotoToLoad {            public String url;            public ImageView imageView;
            public PhotoToLoad(String u, ImageView i) {                    url = u;                    imageView = i;            }    }
    class PhotosLoader implements Runnable {
            PhotoToLoad photoToLoad;
            PhotosLoader(PhotoToLoad photoToLoad) {
                    this.photoToLoad = photoToLoad;
            }
            public void run() {                    if (imageViewReused(photoToLoad))                            return;                    Bitmap bmp = getBitmap(photoToLoad.url);                    memoryCache.put(photoToLoad.url, bmp);                    if (imageViewReused(photoToLoad))                            return;                    BitmapDisplayer bd = new BitmapDisplayer(bmp, photoToLoad);                    // 更新的操作放在UI线程中                    Activity a = (Activity) photoToLoad.imageView.getContext();                    a.runOnUiThread(bd);            }    }
    /**     * 防止图片错位     * 
     * @param photoToLoad     * @return     */    boolean imageViewReused(PhotoToLoad photoToLoad) {            String tag = imageViews.get(photoToLoad.imageView);            if (tag == null || !tag.equals(photoToLoad.url))                    return true;            return false;    }
    // 用于在UI线程中更新界面    class BitmapDisplayer implements Runnable {            Bitmap bitmap;            PhotoToLoad photoToLoad;
            public BitmapDisplayer(Bitmap b, PhotoToLoad p) {                    bitmap = b;                    photoToLoad = p;            }
            public void run() {                    if (imageViewReused(photoToLoad))                            return;                    if (bitmap != null)                            photoToLoad.imageView.setImageBitmap(bitmap);                              }    }
    public void clearCache() {            memoryCache.clear();            fileCache.clear();    }
    public static void CopyStream(InputStream is, OutputStream os) {            final int buffer_size = 1024;            try {                    byte[] bytes = new byte[buffer_size];                    for (;;) {                            int count = is.read(bytes, 0, buffer_size);                            if (count == -1)                                    break;                            os.write(bytes, 0, count);                    }            } catch (Exception ex) {            }    }
    
    
    public static Bitmap getImage(String Url) throws Exception {
      
try {
 
URL url = new URL(Url);
 
String responseCode = url.openConnection().getHeaderField(0);
 
if (responseCode.indexOf("200") < 0)
 
throw new Exception("图片文件不存在或路径错误,错误代码:" + responseCode);
  return BitmapFactory.decodeStream(url.openStream());
 
} catch (IOException e) {
 
// TODO Auto-generated catch block
 
throw new Exception(e.getMessage());
 
}
 
}}
出来的效果如图【不知道图片能不能看得到,上传的貌似传不上去】   要的结果就是每个图片把各自对应的imageview给铺满androidlayouturl

解决方案 »

  1.   

    看不到图片,不知道楼主具体什么意思……
    猜测:你可以为ImageView设置scaleType属性为fitXY,图片会自动拉伸到ImageView尺寸
      

  2.   

    太感谢你了,达到了我要的效果了,可是这样的固定大小只能针对一种分辨率还是太感谢你了,一直在试各种宽高,就是没试出来,大家都说imageview是等比缩放的   牛人啊
      

  3.   


    把布局文件中ImageView的px改为dp,px是和分辨率相关的单位,使用dp使ImageView根据设备自动调整到对应尺寸,另:dp是官方建议使用单位,如density=240(hdpi)的设备上,1dp=1.5px;在density=160(mdpi)上,1dp=1px 希望对你有帮助