Android: create circular image/menu item with picasso
import com.squareup.picasso.Transformation;
public class CircleTransform implements Transformation {
@Override
public Bitmap transform(Bitmap source) {
int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;
Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size);
if (squaredBitmap != source) {
source.recycle();
}
Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig());
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
BitmapShader shader = new BitmapShader(squaredBitmap,
BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP);
paint.setShader(shader);
paint.setAntiAlias(true);
float r = size / 2f;
canvas.drawCircle(r, r, r, paint);
squaredBitmap.recycle();
return bitmap;
}
@Override
public String key() {
return "circle";
}
public Bitmap getCroppedBitmap(Bitmap bitmap) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); // canvas.drawRoundRect(rectF, roundPx, roundPx, paint); canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, bitmap.getWidth() / 2, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); //Bitmap _bmp = Bitmap.createScaledBitmap(output, 60, 60, false); //return _bmp; return output; }
}
For image
Picasso.with(activity).load(mayorShipImageLink).transform(new CircleTransform()).into(ImageView);
For menu item
@Override public boolean onCreateOptionsMenu(final Menu menu) { this.menu = menu; getMenuInflater().inflate(R.menu.message_activity, menu); ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setElevation(0); String profile = "URLIMAGE.jpg"; final Target mTarget = new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) { Log.d("DEBUG", "onBitmapLoaded"); BitmapDrawable mBitmapDrawable = new BitmapDrawable(getResources(), new CircleTransform().getCroppedBitmap(bitmap)); menu.getItem(0).setIcon(mBitmapDrawable); } @Override public void onBitmapFailed(Drawable drawable) { Log.d("DEBUG", "onBitmapFailed"); } @Override public void onPrepareLoad(Drawable drawable) { Log.d("DEBUG", "onPrepareLoad"); } }; Picasso.with(this) .load(profile) .into(mTarget); return super.onCreateOptionsMenu(menu); }
Posting Komentar untuk "Android: create circular image/menu item with picasso"