-
-
Save luqmanoop/44b1072f65962e745d35979971d181de to your computer and use it in GitHub Desktop.
Circular NetworkImageView for use with Volley. Creates a circular bitmap and uses whichever dimension is smaller to determine the radius. Also constrains the circle to the leftmost part of that image. Used in the same way as the Volley NetworkImageView, in both code and xml. Of course you'll need to include the Volley Library in you app too.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.content.Context; | |
import android.graphics.Bitmap; | |
import android.graphics.Canvas; | |
import android.graphics.Paint; | |
import android.graphics.PorterDuffXfermode; | |
import android.graphics.Rect; | |
import android.graphics.RectF; | |
import android.graphics.Bitmap.Config; | |
import android.graphics.PorterDuff.Mode; | |
import android.graphics.drawable.BitmapDrawable; | |
import android.util.AttributeSet; | |
import com.android.volley.toolbox.NetworkImageView; | |
public class CircularNetworkImageView extends NetworkImageView { | |
Context mContext; | |
public CircularNetworkImageView(Context context) { | |
super(context); | |
mContext = context; | |
} | |
public CircularNetworkImageView(Context context, AttributeSet attrs) { | |
this(context, attrs, 0); | |
mContext = context; | |
} | |
public CircularNetworkImageView(Context context, AttributeSet attrs, | |
int defStyle) { | |
super(context, attrs, defStyle); | |
mContext = context; | |
} | |
@Override | |
public void setImageBitmap(Bitmap bm) { | |
if(bm==null) return; | |
setImageDrawable(new BitmapDrawable(mContext.getResources(), | |
getCircularBitmap(bm))); | |
} | |
/** | |
* Creates a circular bitmap and uses whichever dimension is smaller to determine the width | |
* <br/>Also constrains the circle to the leftmost part of the image | |
* | |
* @param bitmap | |
* @return bitmap | |
*/ | |
public Bitmap getCircularBitmap(Bitmap bitmap) { | |
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), | |
bitmap.getHeight(), Config.ARGB_8888); | |
Canvas canvas = new Canvas(output); | |
int width = bitmap.getWidth(); | |
if(bitmap.getWidth()>bitmap.getHeight()) | |
width = bitmap.getHeight(); | |
final int color = 0xff424242; | |
final Paint paint = new Paint(); | |
final Rect rect = new Rect(0, 0, width, width); | |
final RectF rectF = new RectF(rect); | |
final float roundPx = width / 2; | |
paint.setAntiAlias(true); | |
canvas.drawARGB(0, 0, 0, 0); | |
paint.setColor(color); | |
canvas.drawRoundRect(rectF, roundPx, roundPx, paint); | |
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); | |
canvas.drawBitmap(bitmap, rect, rect, paint); | |
return output; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment