Thursday, 11 June 2015

Merge Two Displayer (Universal Image Loader Android)

Merge Two Displayer (Universal Image Loader Android)

  1. Create a class named TwoDisplayer
    import android.graphics.Bitmap;
    import android.graphics.BitmapShader;
    import android.graphics.Canvas;
    import android.graphics.ColorFilter;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.graphics.PixelFormat;
    import android.graphics.Rect;
    import android.graphics.RectF;
    import android.graphics.Shader;
    import android.graphics.drawable.Drawable;
    import android.view.View;
    import android.view.animation.AlphaAnimation;
    import android.view.animation.DecelerateInterpolator;
    import android.widget.ImageView;
    
    import com.nostra13.universalimageloader.core.assist.LoadedFrom;
    import com.nostra13.universalimageloader.core.display.BitmapDisplayer;
    import com.nostra13.universalimageloader.core.imageaware.ImageAware;
    import com.nostra13.universalimageloader.core.imageaware.ImageViewAware;
    
    
    
    public class TwoDisplayer implements BitmapDisplayer
    {
     protected int cornerRadius;
     protected int margin;
    
     private int durationMillis;
     private boolean animateFromNetwork;
     private boolean animateFromDisk;
     private boolean animateFromMemory;
    
    
     public TwoDisplayer(int cornerRadiusPixels, int fadeInTime){
    
      setCorner(cornerRadiusPixels,0,"");
      setFader(fadeInTime,true,true,true);
    
     }
     public void setCorner(int cornerRadiusPixels, int marginPixels,String dummy) {
      this.cornerRadius = cornerRadiusPixels;
      this.margin = marginPixels;
     }
     public void setFader(int durationMillis, boolean animateFromNetwork,
     boolean animateFromDisk,boolean animateFromMemory) {
      this.durationMillis = durationMillis;
      this.animateFromNetwork = animateFromNetwork;
      this.animateFromDisk = animateFromDisk;
      this.animateFromMemory = animateFromMemory;
     }
     @Override
     public void display(Bitmap bitmap, ImageAware imageAware, LoadedFrom loadedFrom)
     {
    
      if (!(imageAware instanceof ImageViewAware)) {
       throw new IllegalArgumentException("ImageAware should
     wrap ImageView. ImageViewAware is expected.");
      }
      imageAware.setImageDrawable(new RoundedDrawable(bitmap, cornerRadius, margin));
      if ((animateFromNetwork && loadedFrom == LoadedFrom.NETWORK) || (animateFromDisk && loadedFrom == LoadedFrom.DISC_CACHE) ||
        (animateFromMemory && loadedFrom == LoadedFrom.MEMORY_CACHE)) {
       animate(imageAware.getWrappedView(), durationMillis);
      }
     }
    
    
     /**
      * Animates {@link ImageView} with "fade-in" effect
      *
      * @param imageView {@link ImageView} which display image in
      * @param durationMillis The length of the animation in milliseconds
      */
     public static void animate(View imageView, int durationMillis) {
      if (imageView != null) {
       AlphaAnimation fadeImage = new AlphaAnimation(0, 1);
       fadeImage.setDuration(durationMillis);
       fadeImage.setInterpolator(new DecelerateInterpolator());
       imageView.startAnimation(fadeImage);
      }
     }
    
     //=========================RoundedDrawable=======================
     public static class RoundedDrawable extends Drawable {
      protected final float cornerRadius;
      protected final int margin;
      protected final RectF mRect = new RectF(),
        mBitmapRect;
      protected final BitmapShader bitmapShader;
      protected final Paint paint;
      public RoundedDrawable(Bitmap bitmap, int cornerRadius, int margin) {
       this.cornerRadius = cornerRadius;
       this.margin = margin;
       bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
       mBitmapRect = new RectF (margin, margin, bitmap.getWidth() - margin, bitmap.getHeight() - margin);
       paint = new Paint();
       paint.setAntiAlias(true);
       paint.setShader(bitmapShader);
      }
      @Override
      protected void onBoundsChange(Rect bounds) {
       super.onBoundsChange(bounds);
       mRect.set(margin, margin, bounds.width() - margin, bounds.height() - margin);
       // Resize the original bitmap to fit the new bound
       Matrix shaderMatrix = new Matrix();
       shaderMatrix.setRectToRect(mBitmapRect, mRect, Matrix.ScaleToFit.FILL);
       bitmapShader.setLocalMatrix(shaderMatrix);
      }
      @Override
      public void draw(Canvas canvas) {
       canvas.drawRoundRect(mRect, cornerRadius, cornerRadius, paint);
      }
      @Override
      public int getOpacity() {
       return PixelFormat.TRANSLUCENT;
      }
      @Override
      public void setAlpha(int alpha) {
       paint.setAlpha(alpha);
      }
      @Override
      public void setColorFilter(ColorFilter cf) {
       paint.setColorFilter(cf);
      }
     }
    }
    
    
  2. Copy and paste above code
  3. Call from activity / adapter as below
    defaultOptions = new DisplayImageOptions.Builder().cacheOnDisk(true).cacheInMemory(false).imageScaleType(ImageScaleType.EXACTLY).resetViewBeforeLoading(true)
        .displayer(new TwoDisplayer(10, 1000))