android - library - Haga ImageView con la esquina redonda usando picasso
picasso get() load (6)
Sé que hay muchos enlaces disponibles para hacer ImageView
Round Corner. Pero estoy usando la biblioteca Picasso
para cargar imágenes. Remito el link para obtener un resultado. Pero el problema es que lo estoy usando en ListView
y para el primer elemento de LIstView''s
ImageView
funciona perfectamente bien, pero la transformación restante no funciona.
Como he dicho here . Puede usar la clase MaskTransformation
de la biblioteca picasso-transformations .
Ejemplo:
final Transformation transformation = new MaskTransformation(getContext(), R.drawable.rounded_convers_transformation);
Picasso.with(activity).load(url).transform(transformation).into(imageView);
res / drawable / 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>
ACTUALIZACIÓN: Pero tenga en cuenta que también debe .resize(w,h)
la imagen, porque si la imagen será grande, la ronda no será determinable
Estoy usando esta transformación: https://gist.github.com/julianshen/5829333
Picasso.with(activity).load(url).transform(new CircleTransform()).into(imageView);
Puede usar esta clase para hacer esquinas redondeadas vista de imagen rectangular con Picasso, usarla así
final int radius = 5;
final int margin = 5;
final Transformation transformation = new RoundedCornersTransformation(radius, margin);
Picasso.with(activity).load(url).transform(transformation).into(imageView);
Aquí está la clase RoundedCornersTransform.
Picasso.with(activity).load(url).transform(new RoundedCornersTransform(this)).into(imageView);
Puede usar la clase RoundedCornersTransformation de la biblioteca picasso-transformations .
Ejemplo:
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";
}
}
Siguiendo la respuesta de @ stevyhacker y esta relacionada , se me ocurrió esto:
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";
}
}
Úsalo así:
Picasso.with(context).load(url).transform(new RoundedCornersTransform()).into(imageView);
Probablemente necesite algunas mejoras, así que ¡cuidado!
RoundedCornersTransformation
clase RoundedCornersTransformation
de la biblioteca picasso-transformations
. Tenía un adaptador personalizado con patrón de soporte de vista en mi vista de lista. build.gradle
debajo la dependencia en mi build.gradle
:
dependencies {
compile ''jp.wasabeef:picasso-transformations:2.1.0''
}
Y en mi customArrayAdapter.java
, agregué:
Picasso.with(getContext()).load(path).transform(new RoundedCornersTransformation(10,10)).resize(175,300).into(viewHolder.ivImage);
Esto redimensionaría y le daría esquinas redondeadas a tus imágenes.