Сделайте ImageView с круглым углом Используя пикассо

Я знаю, что есть много ссылок, чтобы сделать ImageView Round Corner. Но я использую библиотеку Picasso для загрузки изображений. Я ссылаюсь на ссылку, чтобы получить результат. Но проблема в том, что я использую его в ListView и для первого элемента LIstView's ImageView работает отлично, но для оставшегося некогда преобразования не работает.

Я использую это преобразование: https://gist.github.com/julianshen/5829333

 Picasso.with(activity).load(url).transform(new CircleTransform()).into(imageView); 

Вы можете использовать этот класс, чтобы округлить углы изображения прямоугольника с Picasso, использовать его так

  Picasso.with(activity).load(url).transform(new RoundedCornersTransform(this)).into(imageView); 

Вот класс RoundedCornersTransform.

 package com.demo.picasso; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import com.squareup.picasso.Transformation; public class RoundedCornersTransform 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 / 8f; canvas.drawRoundRect(new RectF(0, 0, source.getWidth(), source.getHeight()), r, r, paint); squaredBitmap.recycle(); return bitmap; } @Override public String key() { return "rounded_corners"; } } 

Вы можете использовать класс RoundedCornersTransformation библиотеки picasso-transformations .

Пример :

 final int radius = 5; final int margin = 5; final Transformation transformation = new RoundedCornersTransformation(radius, margin); Picasso.with(activity).load(url).transform(transformation).into(imageView); 

Я использовал класс picasso-transformations библиотеки picasso-transformations . У меня был пользовательский адаптер с шаблоном держателя вида в моем списке. Я добавил ниже зависимости в моей build.gradle :

 dependencies { compile 'jp.wasabeef:picasso-transformations:2.1.0' } 

И в моем customArrayAdapter.java я добавил:

Picasso.with(getContext()).load(path).transform(new RoundedCornersTransformation(10,10)).resize(175,300).into(viewHolder.ivImage);
Это изменит размер и даст округлые углы изображениям.

Следуя ответу @ stevyhacker и этому связанному , я придумал следующее:

 import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import com.squareup.picasso.Transformation; public class RoundedCornersTransform implements Transformation { private static Bitmap createRoundedRectBitmap(Bitmap bitmap, float topLeftCorner, float topRightCorner, float bottomRightCorner, float bottomLeftCorner) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = Color.WHITE; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); Path path = new Path(); float[] radii = new float[]{ topLeftCorner, bottomLeftCorner, topRightCorner, topRightCorner, bottomRightCorner, bottomRightCorner, bottomLeftCorner, bottomLeftCorner }; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); path.addRoundRect(rectF, radii, Path.Direction.CW); canvas.drawPath(path, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } @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(); } float r = size / 4f; Bitmap roundedBitmap = createRoundedRectBitmap(squaredBitmap, r, r, r, r); squaredBitmap.recycle(); return roundedBitmap; } @Override public String key() { return "rounded_corners"; } } 

Используйте его так:

 Picasso.with(context).load(url).transform(new RoundedCornersTransform()).into(imageView); 

Наверное, нужны некоторые улучшения, так что следите!

Как сказано здесь . Вы можете использовать класс MaskTransformation библиотеки picasso-transformations .

Пример :

 final Transformation transformation = new MaskTransformation(getContext(), R.drawable.rounded_convers_transformation); Picasso.with(activity).load(url).transform(transformation).into(imageView); 

Рез / рисуем / rounded_convers_transformation.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="5dp"/> <solid android:color="@color/black"/> </shape> 

ОБНОВЛЕНИЕ: Но обратите внимание, что вы также должны .resize(w,h) изображение, потому что, если изображение будет большим, раунд не будет определяемым