Uso de la biblioteca picasso con una vista de imagen circular
Estoy buscando en el uso de la biblioteca de Picasso para descargar una imagen de la URL y pasar esto en la imagen de la imagen circular, pero ya que picasso requiere que pase en una imagen realVeré a un estancamiento sobre la forma de hacerlo
Estoy usando la biblioteca de picasso de aquí http://square.github.io/picasso/ y la clase de la opinión de la imagen del círculo de aquí https://github.com/hdodenhof/CircleImageView
- Con RecyclerView, ¿Picasso sigue siendo necesario?
- Picasso onBitmapLoaded nunca llamado
- Los metadatos Exif no proporcionan orientación para las imágenes de unidades de Google
- Descargar y guardar imágenes con Picasso
- El objetivo no debe ser nulo utilizando la Biblioteca Picasso
Aquí está el inicio de mi código para obtener la imagen
private void getData() { userName.setText(prefs.getString("userName","")); jobTitle.setText(prefs.getString("profile","")); userLocation.setText(prefs.getString("location","")); // ?????? // Picasso.with(context).load(image link here).into(imageview here); //CircleImageView img = new CircleImageView(this); //img.setImageResource(); //img.setImageBitmap(); //img.setImageDrawable(); //img.setImageURI(); }
Editar:
Aquí está el xml para el círculoImageView
<michael.CircleImageView android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/shadow" android:layout_gravity="center" android:layout_marginTop="16dp" app:border_width="2dp" app:border_color="#274978" android:id="@+id/circleImageView"
- Preload de imágenes en la memoria / disco con Android Picasso
- Picasso no funciona si url contiene espacio
- OkHTTP y Picasso no funcionan juntos
- Picasso carga recursos extraíbles de su URI
- Biblioteca Picasso - Fuera de Memoria
- ¿Cómo acceder a Drawable cuando se utiliza Picasso?
- Android get Imagen extraíble después de picasso cargado
- Cómo recuperar la rotación de miniaturas
Utilizar esta
Clase de actividad
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String imageUrl = "https://www.baby-connect.com/images/baby2.gif"; CircleImageView imageView = (CircleImageView) findViewById(R.id.image); Picasso.with(getApplicationContext()).load(imageUrl) .placeholder(R.drawable.images).error(R.drawable.ic_launcher) .into(imageView); } }
Archivo de diseño
<de.hdodenhof.circleimageview.CircleImageView android:id="@+id/image" android:layout_width="160dp" android:layout_height="160dp" android:layout_centerInParent="true" android:src="@drawable/images" app:border_color="#ffffff" app:border_width="2dp" />
Esto funciona bien.
No creo que necesite la biblioteca CircleImageView
Puede implementar Transformación circular. Compruebe lo siguiente
https://gist.github.com/julianshen/5829333
entonces
Picasso.with(activity).load(image link here) .transform(new CircleTransform()).into(ImageView);
Utilice este código para crear Imageview
circular …
public class RoundedImageView extends ImageView { public RoundedImageView(Context context) { super(context); // TODO Auto-generated constructor stub } public RoundedImageView(Context context, AttributeSet attrs) { super(context, attrs); } public RoundedImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onDraw(Canvas canvas) { Drawable drawable = getDrawable(); if (drawable == null) { return; } if (getWidth() == 0 || getHeight() == 0) { return; } Bitmap b = ((BitmapDrawable)drawable).getBitmap() ; Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); int w = getWidth(), h = getHeight(); Bitmap roundBitmap = getCroppedBitmap(bitmap, w); canvas.drawBitmap(roundBitmap, 0,0, null); } public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) { Bitmap sbmp; if(bmp.getWidth() != radius || bmp.getHeight() != radius) sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false); else sbmp = bmp; Bitmap output = Bitmap.createBitmap(sbmp.getWidth(), sbmp.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xffa19774; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight()); paint.setAntiAlias(true); paint.setFilterBitmap(true); paint.setDither(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(Color.parseColor("#BAB399")); canvas.drawCircle(sbmp.getWidth() / 2+0.7f, sbmp.getHeight() / 2+0.7f, sbmp.getWidth() / 2+0.1f, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(sbmp, rect, rect, paint); return output; } }
Tome el ID de CircleImageView primero:
CircleImageView mCircleImageView = (CircleImageView)findViewById(R.id.circleImageView);
Y pase la identificación a la biblioteca de Picasso:
Picasso.with(mContext).load(Uri.parse(link)).placeholder(drawable).into(mCircleImageView);
Esto funcionó para mí.
He creado una clase de destino que utiliza la clase RoundedBitmapDrawable
de Android nativo para hacer la imagen redonda (elimina la necesidad de agregar una clase de transformación de círculo al código), consulte la solución a continuación:
public class RoundedImageBitmapTarget implements Target { private final Context context; private final ImageView view; public RoundedImageBitmapTarget(Context context, ImageView view) { this.context = context; this.view = view; } @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { setBitmap(bitmap); } @Override public void onBitmapFailed(Drawable errorDrawable) { setBitmap(((BitmapDrawable) errorDrawable).getBitmap()); } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { setBitmap(((BitmapDrawable) placeHolderDrawable).getBitmap()); } public void setBitmap(Bitmap bitmap) { view.setImageDrawable(getRoundBitmap(context, bitmap)); } public static RoundedBitmapDrawable getRoundBitmap(Context context, Bitmap bitmap) { Resources res = context.getResources(); RoundedBitmapDrawable round = RoundedBitmapDrawableFactory.create(res, bitmap); round.setCircular(true); round.setTargetDensity(context.getResources().getDisplayMetrics()); return round; } public static void load(Context context, ImageView view, String url, int size, @DrawableRes int placeholder) { RoundedImageBitmapTarget target; Picasso.with(context).load(url) .resize(0, size) .placeholder(placeholder) .error(placeholder) .into(target = new RoundedImageBitmapTarget(context, view)); view.setTag(target); } }
- ¿Cómo puedo establecer un EditText a la entrada de sólo números hexadecimales?
- Android RelativeLayout cambiar altura de forma programática