2014-07-08 1 views
0

Je suis nouveau sur Android Je veux mettre l'image en arrière-plan qui devient de Url ..Je me sers ImageLoader Classe s'il vous plaît aidez-moi Aff image en arrière-plan ..Comment faire pour configurer en arrière-plan de l'image Voir

Cette est-ce mon image Loader classe

public class ImageLoader { 

// the simplest in-memory cache implementation. This should be replaced with 
// something like SoftReference or BitmapOptions.inPurgeable(since 1.6) 
private HashMap<String, Bitmap> cache = new HashMap<String, Bitmap>(); 

private File cacheDir; 

static ArrayList<String> img_path = new ArrayList<String>(); 

static String sd_card_folder_name = "ImageLoader"; 

static int width; 

public ImageLoader(Context context, Activity acc) { 
    // Make the background thead low priority. This way it will not affect 
    // the UI performance 
    photoLoaderThread.setPriority(Thread.NORM_PRIORITY - 1); 

    DisplayMetrics displaymetrics = new DisplayMetrics(); 
    acc.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
    width = displaymetrics.widthPixels; 
    Log.d("width", "width = " + width); 

    cache.clear(); 

    img_path = new ArrayList<String>(); 

    // Find the dir to save cached images 
    if (android.os.Environment.getExternalStorageState().equals(
      android.os.Environment.MEDIA_MOUNTED)) 
     cacheDir = new File(android.os.Environment 
       .getExternalStorageDirectory(), sd_card_folder_name); 
    else 
     cacheDir = context.getCacheDir(); 
    if (!cacheDir.exists()) 
     cacheDir.mkdirs(); 

} 

final int stub_id = R.drawable.loader; 

public void DisplayImage(String url, Activity activity, ImageView imageView) { 
    try { 
     String filename = String.valueOf(url.hashCode()); 

     File[] file_array = cacheDir.listFiles(); 

     for (int i = 0; i < file_array.length; i++) { 
      img_path.add(file_array[i].getName()); 
     } 

     if (img_path.contains(filename)) { 
      imageView.setImageBitmap(BitmapFactory 
        .decodeFile("/mnt/sdcard/" + sd_card_folder_name + "/" 
          + filename)); 
     } else { 
      if (cache.containsKey(url)) { 
       imageView.setImageBitmap(cache.get(url)); 
      } else { 
       queuePhoto(url, activity, imageView, filename); 
       imageView.setImageResource(stub_id); 
      } 
     } 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 
} 

private void queuePhoto(String url, Activity activity, ImageView imageView, String _name) { 
    // This ImageView may be used for other images before. So there may be 
    // some old tasks in the queue. We need to discard them. 
    photosQueue.Clean(imageView); 
    PhotoToLoad p = new PhotoToLoad(url, imageView, _name); 
    synchronized (photosQueue.photosToLoad) { 
     photosQueue.photosToLoad.push(p); 
     photosQueue.photosToLoad.notifyAll(); 
    } 

    // start thread if it's not started yet 
    if (photoLoaderThread.getState() == Thread.State.NEW) 
     photoLoaderThread.start(); 
} 

private Bitmap getBitmap(String url) { 
    // I identify images by hashcode. Not a perfect solution, good for the 
    // demo. 

    if (url != null && !(url.equals(""))) { 
     String filename = String.valueOf(url.hashCode()); 
     File f = new File(cacheDir, filename); 

     /* 
     * // from SD cache Bitmap b = decodeFile(f); if (b != null) return 
     * b; 
     */ 
     // from web 
     try { 
      Bitmap bitmap = null; 
      InputStream is = new URL(url).openStream(); 
      OutputStream os = new FileOutputStream(f); 
      Utils.CopyStream(is, os); 
      os.close(); 
      bitmap = decodeFile(f); 
      return bitmap; 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
      return null; 
     } 
    } 
    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; 
     BitmapFactory.decodeStream(new FileInputStream(f), null, o); 

     // Find the correct scale value. It should be the power of 2. 
     final int REQUIRED_SIZE=300; 
      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); 
    } catch (FileNotFoundException e) { 
    } 
    return null; 
} 

// Task for the queue 
private class PhotoToLoad { 
    public String url; 
    public ImageView imageView; 
    public String _name; 

    public PhotoToLoad(String u, ImageView i, String n) { 
     url = u; 
     imageView = i; 
     _name = n; 
    } 
} 

PhotosQueue photosQueue = new PhotosQueue(); 

public void stopThread() { 
    photoLoaderThread.interrupt(); 
} 

// stores list of photos to download 
class PhotosQueue { 
    private Stack<PhotoToLoad> photosToLoad = new Stack<PhotoToLoad>(); 

    // removes all instances of this ImageView 
    public void Clean(ImageView image) { 
     for (int j = 0; j < photosToLoad.size();) { 
      if (photosToLoad.get(j).imageView == image) 
       photosToLoad.remove(j); 
      else 
       ++j; 
     } 
    } 
} 

class PhotosLoader extends Thread { 
    public void run() { 
     try { 
      while (true) { 
       // thread waits until there are any images to load in the 
       // queue 
       if (photosQueue.photosToLoad.size() == 0) 
        synchronized (photosQueue.photosToLoad) { 
         photosQueue.photosToLoad.wait(); 
        } 
       if (photosQueue.photosToLoad.size() != 0) { 
        PhotoToLoad photoToLoad; 
        synchronized (photosQueue.photosToLoad) { 
         photoToLoad = photosQueue.photosToLoad.pop(); 
        } 
        Bitmap bmp = getBitmap(photoToLoad.url); 
        cache.put(photoToLoad.url, bmp); 
        Object tag = photoToLoad.imageView.getTag(); 
        String FileName = photoToLoad._name; 
        if (FileName != null 
          && ((String) FileName).equals(photoToLoad._name)) { 
         BitmapDisplayer bd = new BitmapDisplayer(bmp, 
           photoToLoad.imageView, FileName); 
         Activity a = (Activity) photoToLoad.imageView 
           .getContext(); 
         a.runOnUiThread(bd); 
        } 
       } 
       if (Thread.interrupted()) 
        break; 
      } 
     } catch (InterruptedException e) { 
      // allow thread to exit 
     } 
    } 
} 

PhotosLoader photoLoaderThread = new PhotosLoader(); 

// Used to display bitmap in the UI thread 
class BitmapDisplayer implements Runnable { 
    Bitmap bitmap; 
    ImageView imageView; 
    String file_name; 

    public BitmapDisplayer(Bitmap b, ImageView i, String _name) { 
     bitmap = b; 
     imageView = i; 
     file_name = _name; 
    } 

    public void run() { 
     if (bitmap != null) { 

      load_full_image(imageView, file_name, bitmap); 

     } else 
      imageView.setImageResource(stub_id); 
    } 
} 

private Runnable mMyRunnable = new Runnable() { 
    @Override 
    public void run() { 

    } 
}; 

public void load_full_image(ImageView img, String _name, Bitmap btmp) { 
    img_path = new ArrayList<String>(); 

    File[] file_array = cacheDir.listFiles(); 
    for (int i = 0; i < file_array.length; i++) { 
     img_path.add(file_array[i].getName()); 
    } 

    if (img_path.contains(_name)) { 
     img.setImageBitmap(BitmapFactory 
       .decodeFile("/mnt/sdcard/" + sd_card_folder_name + "/" 
         + _name)); 
    } else { 
     img.setImageBitmap(btmp); 
    } 
} 

public void clearCache() { 
    // clear memory cache 
    cache.clear(); 

    // clear SD cache 
    File[] files = cacheDir.listFiles(); 
    for (File f : files) 
     f.delete(); 
} 

c'est mon activité Où j'obtenir une image en imagview

protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
setContentView(R.layout.userprofile); 
Button addfrnd=(Button)findViewById(R.id.addfrnd); 
ImageView image = (ImageView) findViewById(R.id.imageView1); 
UserModel user = (UserModel) getIntent().getSerializableExtra("User"); 
UserByIdModel tempuser = (UserByIdModel) getIntent().getSerializableExtra("UserById"); 
String UserId=String.valueOf(tempuser.getUser_Id()); 
String image_url=tempuser.getUser_Image(); 
int loader = R.drawable.loader; 
ImageLoader imgLoader = new ImageLoader(getApplicationContext(), 
     UserByIdProfile.this); 

image.setTag(image_url); 

    // whenever you want to load an image from url 
// call DisplayImage function 
// url - image url to load 
// loader - loader image, will be displayed before getting image 
// image - ImageView 
    imgLoader.DisplayImage(image_url, UserByIdProfile.this, image); 
+0

voir http://stackoverflow.com/questions/22322428/unable-to-set-image-view-background-image-using-universal-image-loader –

Répondre

1

vous devez changer dans load_full_image méthode de imageLoader classe, comme ci-dessous

public class ImageLoader { 
... 
Context mContext; 
... 

public ImageLoader(Context context, Activity acc) { 
... 
mContext = context 
.... 

} 


public void load_full_image(ImageView img, String _name, Bitmap btmp) { 
img_path = new ArrayList<String>(); 

File[] file_array = cacheDir.listFiles(); 
for (int i = 0; i < file_array.length; i++) { 
    img_path.add(file_array[i].getName()); 
} 

if (img_path.contains(_name)) { 
    Drawable d = new BitmapDrawable(mContext.getResources(),BitmapFactory 
         .decodeFile("/mnt/sdcard/" + sd_card_folder_name + "/" 
           + _name)); 
    img.setBackground(d); 
} else { 

    Drawable d = new BitmapDrawable(mContext.getResources(),btmp); 
    img.setBackground(d); 
} 
} 
} 

essayer ce code peut être cela fonctionnera

+0

comment ça marche dans Acivity – user3807055

+0

comment y remédier. ... mcontext, Phototoload ne peut être résolu – user3807055

+0

Comment réparer ce – user3807055

-1
[Use this project aims to provide a reusable instrument for asynchronous image loading, caching and displaying.][1] 

Features 

1)Multithread image loading (async or sync) 
2)Wide customization of ImageLoader's configuration (thread executors, downloader, decoder, 3)memory and disk cache, display image options, etc.) 
4)Many customization options for every display image call (stub images, caching switch, decoding options, Bitmap processing and displaying, etc.) 
5)Image caching in memory and/or on disk (device's file system or SD card) 
6)Listening loading process (including downloading progress) 
*****Android 2.0+ support 


    [1]: https://github.com/nostra13/Android-Universal-Image-Loader 
0

Vous avez créé une instance de ImageLoader mais n'ont pas Initialiser ImageLoader. Pour cela, ajoutez cette ligne de code dans votre constructeur après imageLoader = ImageLoader.getInstance(); :

imageLoader.init (ImageLoaderConfiguration.createDefault (ctx));

Vous n'avez déclaré aucune option pour votre chargeur d'image. Modifier votre code DisplayImageOptions comme ci-dessous:

DisplayImageOptions Options = new DisplayImageOptions.Builder() .showImageOnLoading (R.drawable.image_loading) .showImageForEmptyUri (R.drawable.no_image) .showImageOnFail (R.drawable.image_failed) .cacheInMemory (true) .cacheOnDisc (true) .bitmapConfig (Bitmap.Config.RGB_565) .build();

Questions connexes