다운로드 한 이미지의 크기를 imageview에 맞게 조정

RidRoid

ListView로 작업하는 것은 이번이 처음이며 여기에 내 문제가 있습니다. 인터넷 (parse.com에서)에서 이미지를 다운로드, 디코딩 및 크기 조정하는 Imageloader 클래스가 있습니다. 전체 프로세스는 잘 작동하지만 이미지가 imageview에로드 될 때 부모 너비에 맞지 않습니다. 사용에 관계없이 전체 화면을 채우는 정사각형 이미지로 인스 타 그램의 디스플레이와 유사한 것을 만들려고합니다. 장치.

이것이 내가 실제로 가지고있는 것입니다 : http://i.imgur.com/OMDyG8I.jpg 이것이 내가 원하는 것입니다 : http://i.imgur.com/nGHADzK.jpg

튜토리얼에서 찾은 Imageloader.java를 사용했지만 실제로 어떻게 작동하는지 이해하지 못했습니다. 그래서 여러분이 어떻게 작동하는지 설명해 주시면 목록보기에 정사각형 전체 화면 이미지를 갖도록 조정할 수 있습니다. 미리 감사드립니다 :)

이것은 내 ImageLoader.java입니다 (현재 내 레이아웃에 특별한 것은 없습니다 ... 상위 높이와 witdh가 일치하는 이미지 뷰 만).

package com.hichamridouane.smartshop;


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;
importenter code here java.net.HttpURLConnection;
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.os.Handler;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.ImageView;

public class ImageLoader {
     MemoryCache memoryCache = new MemoryCache();
    FileCache fileCache;
private Map<ImageView, String> imageViews = Collections
        .synchronizedMap(new WeakHashMap<ImageView, String>());
ExecutorService executorService;
// Handler to display images in UI thread
Handler handler = new Handler();

public ImageLoader(Context context) {
    fileCache = new FileCache(context);
    executorService = Executors.newFixedThreadPool(5);
}

final int stub_id = R.drawable.temp_img;

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);
        imageView.setImageResource(stub_id);
    }
}

private void queuePhoto(String url, ImageView imageView) {
    PhotoToLoad p = new PhotoToLoad(url, imageView);
    executorService.submit(new PhotosLoader(p));
}

private Bitmap getBitmap(String url) {
    File f = fileCache.getFile(url);

    Bitmap b = decodeFile(f);
    if (b != null)
        return b;

    // Download Images from the Internet
    try {
        Bitmap bitmap = null;
        URL imageUrl = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) imageUrl
                .openConnection();
        conn.setConnectTimeout(30000);
        conn.setReadTimeout(30000);
        conn.setInstanceFollowRedirects(true);
        InputStream is = conn.getInputStream();
        OutputStream os = new FileOutputStream(f);
        Utils.CopyStream(is, os);
        os.close();
        conn.disconnect();
        bitmap = decodeFile(f);
        return bitmap;
    } catch (Throwable ex) {
        ex.printStackTrace();
        if (ex instanceof OutOfMemoryError)
            memoryCache.clear();
        return null;
    }
}

// Decodes image and scales it to reduce memory consumption
private Bitmap decodeFile(File f) {
    try {
        // Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        FileInputStream stream1 = new FileInputStream(f);
        BitmapFactory.decodeStream(stream1, null, o);
        stream1.close();

        // Find the correct scale value. It should be the power of 2.
        final int REQUIRED_SIZE = 600;
        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;
        FileInputStream stream2 = new FileInputStream(f);
        Bitmap bitmap = BitmapFactory.decodeStream(stream2, null, o2);
        stream2.close();
        return bitmap;
    } catch (FileNotFoundException e) {
    } catch (IOException e) {
        e.printStackTrace();
    }
    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;
    }

    @Override
    public void run() {
        try {
            if (imageViewReused(photoToLoad))
                return;
            Bitmap bmp = getBitmap(photoToLoad.url);
            memoryCache.put(photoToLoad.url, bmp);
            if (imageViewReused(photoToLoad))
                return;
            BitmapDisplayer bd = new BitmapDisplayer(bmp, photoToLoad);
            handler.post(bd);
        } catch (Throwable th) {
            th.printStackTrace();
        }
    }
}

boolean imageViewReused(PhotoToLoad photoToLoad) {
    String tag = imageViews.get(photoToLoad.imageView);
    if (tag == null || !tag.equals(photoToLoad.url))
        return true;
    return false;
}

// Used to display bitmap in the UI thread
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);
        else
            photoToLoad.imageView.setImageResource(stub_id);
    }
}

public void clearCache() {
    memoryCache.clear();
    fileCache.clear();
}
}
응 우옌 호 아이 남

우선, 캐시에서 이미지 파일을 디코딩하고 더 작은 비트 맵으로 크기를 조정해야하는 decodeFile () 메서드는 크기를 SQUARE SIZE로 조정하지 않습니다. 따라서 레이아웃이나 ImageView에 지정된 옵션없이 디코딩 된 비트 맵을 ImageView에로드하면 원본 존중 비율로 이미지를 얻을 수 있습니다.

내가 여기서 제안하는 것은 :

  1. 레이아웃에서 ImageView의 너비와 높이를 수정하세요. (기기의 화면 크기 차이로 인해 작동하는지 잘 모르겠습니다.)

  2. 이 사용자 지정 ImageView를 사용하여 모든 ImageView를 정사각형으로 표시합니다.

맞춤 정사각형 ImageView

다음은 xml 레이아웃에서 사용하는 예입니다.

<your.package.to.ENESquareImageView
    android:id="@+id/mini_cover"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:contentDescription="@null"
    android:scaleType="centerCrop" />

도움이 되었기를 바랍니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Div의 제한에 맞게 이미지 크기 조정

분류에서Dev

Android-사용 가능한 공간에 맞게 이미지 크기 조정

분류에서Dev

서로 상대적인 위치를 유지하면서 이미지를 창 크기에 맞게 조정

분류에서Dev

Android Google지도 : 다양한 기기 크기에 맞게지도 패딩을 적절하게 조정

분류에서Dev

CSS를 사용하여 이미지의 가장 큰면에 맞게 div 내부의 이미지 크기 조정

분류에서Dev

CSS / JS 이미지 크기에 맞게 Figure 크기 조정

분류에서Dev

나머지 공간에 맞게 SVG 이미지를 비 비례 적으로 크기 조정

분류에서Dev

Xamarin.Forms-자식에 맞게 CollectionView의 높이를 최소 크기로 조정

분류에서Dev

CSS로 컨테이너에 맞게 이미지 크기를 조정하는 방법은 무엇입니까?

분류에서Dev

Flutter는 화면 크기에 맞게 요소 (아이콘, 이미지 등)의 크기를 자동으로 조정합니까?

분류에서Dev

Firebase에서 비동기식으로 다운로드 한 후 동적 이미지 크기 조정

분류에서Dev

div를 더 작은 크기에 맞추기 위해 그리드의 이미지 크기 조정

분류에서Dev

다양한 비디오 크기에 맞게 워터 마크 크기 조정

분류에서Dev

조정하기 위해 다양한 데이터 및 바닥 글을 사용하여 내용에 맞게 테두리 크기를 조정하는 방법

분류에서Dev

웹 페이지에 맞게 배경 이미지의 크기를 조정하려면 어떻게합니까?

분류에서Dev

UITableViewCell 크기를 다른 화면 크기에 맞게 조정

분류에서Dev

배경 너비에 맞게 이미지보기 크기 조정

분류에서Dev

배경 너비에 맞게 이미지보기 크기 조정

분류에서Dev

컨테이너에 맞게 이미지 크기 조정

분류에서Dev

컨테이너에 맞게 Flex Spark 이미지 크기 조정

분류에서Dev

Google 스프레드 시트의 셀에 맞게 이미지 크기를 자동으로 조정하는 방법은 무엇입니까?

분류에서Dev

이미지 크기에 따라 가운데 맞춤 텍스트 글꼴 크기를 조정합니다. 어떻게?

분류에서Dev

TextView 내부 너비에 맞게 HTML 이미지 크기 조정

분류에서Dev

화면에 맞게 자동 이미지 크기 조정

분류에서Dev

EditText에 맞게 이미지 크기 조정

분류에서Dev

배경 이미지에 맞게 단추 크기 조정

분류에서Dev

OpenCV : 표시된 이미지에 맞게 창의 자동 크기 조정

분류에서Dev

포함 된 이미지의 너비에 맞게 div 크기 조정

분류에서Dev

레터 박스에 맞게 디렉토리의 이미지 크기 조정

Related 관련 기사

  1. 1

    Div의 제한에 맞게 이미지 크기 조정

  2. 2

    Android-사용 가능한 공간에 맞게 이미지 크기 조정

  3. 3

    서로 상대적인 위치를 유지하면서 이미지를 창 크기에 맞게 조정

  4. 4

    Android Google지도 : 다양한 기기 크기에 맞게지도 패딩을 적절하게 조정

  5. 5

    CSS를 사용하여 이미지의 가장 큰면에 맞게 div 내부의 이미지 크기 조정

  6. 6

    CSS / JS 이미지 크기에 맞게 Figure 크기 조정

  7. 7

    나머지 공간에 맞게 SVG 이미지를 비 비례 적으로 크기 조정

  8. 8

    Xamarin.Forms-자식에 맞게 CollectionView의 높이를 최소 크기로 조정

  9. 9

    CSS로 컨테이너에 맞게 이미지 크기를 조정하는 방법은 무엇입니까?

  10. 10

    Flutter는 화면 크기에 맞게 요소 (아이콘, 이미지 등)의 크기를 자동으로 조정합니까?

  11. 11

    Firebase에서 비동기식으로 다운로드 한 후 동적 이미지 크기 조정

  12. 12

    div를 더 작은 크기에 맞추기 위해 그리드의 이미지 크기 조정

  13. 13

    다양한 비디오 크기에 맞게 워터 마크 크기 조정

  14. 14

    조정하기 위해 다양한 데이터 및 바닥 글을 사용하여 내용에 맞게 테두리 크기를 조정하는 방법

  15. 15

    웹 페이지에 맞게 배경 이미지의 크기를 조정하려면 어떻게합니까?

  16. 16

    UITableViewCell 크기를 다른 화면 크기에 맞게 조정

  17. 17

    배경 너비에 맞게 이미지보기 크기 조정

  18. 18

    배경 너비에 맞게 이미지보기 크기 조정

  19. 19

    컨테이너에 맞게 이미지 크기 조정

  20. 20

    컨테이너에 맞게 Flex Spark 이미지 크기 조정

  21. 21

    Google 스프레드 시트의 셀에 맞게 이미지 크기를 자동으로 조정하는 방법은 무엇입니까?

  22. 22

    이미지 크기에 따라 가운데 맞춤 텍스트 글꼴 크기를 조정합니다. 어떻게?

  23. 23

    TextView 내부 너비에 맞게 HTML 이미지 크기 조정

  24. 24

    화면에 맞게 자동 이미지 크기 조정

  25. 25

    EditText에 맞게 이미지 크기 조정

  26. 26

    배경 이미지에 맞게 단추 크기 조정

  27. 27

    OpenCV : 표시된 이미지에 맞게 창의 자동 크기 조정

  28. 28

    포함 된 이미지의 너비에 맞게 div 크기 조정

  29. 29

    레터 박스에 맞게 디렉토리의 이미지 크기 조정

뜨겁다태그

보관