Je cherche à utiliser la bibliothèque Picasso pour télécharger une image à partir d'une URL et la transmettre en vue de cercle, mais comme picasso exige que vous transmettiez une image réelle, je suis parvenue à un point mort.
J'utilise la bibliothèque picasso à partir d'ici http://square.github.io/picasso/ Ainsi que la classe d'affichage d'images de cercle à partir d'ici https://github.com/hdodenhof/CircleImageView
Voici le début de mon code pour obtenir l'image
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();
}
Modifier:
voici le xml pour le circleImageView
<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"
Utilisez ceci
Classe d'activité
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);
}
}
Fichier de mise en page
<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" />
Cela fonctionne bien.
Je ne pense pas que vous ayez besoin de la bibliothèque CircleImageView
Vous pouvez mettre en œuvre la transformation circulaire vérifier le Gist ci-dessous
https://Gist.github.com/julianshen/5829333
puis
Picasso.with(activity).load(image link here)
.transform(new CircleTransform()).into(ImageView);
Utilisez ce code pour créer une circulaire Imageview
....
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;
}
}
Prenez d'abord l'ID de CircleImageView:
CircleImageView mCircleImageView = (CircleImageView)findViewById(R.id.circleImageView);
Et passez l'ID à la bibliothèque Picasso:
Picasso.with(mContext).load(Uri.parse(link)).placeholder(drawable).into(mCircleImageView);
Cela a fonctionné pour moi.
J'ai créé une classe cible qui utilise la classe RoundedBitmapDrawable
d'Android pour rendre l'image ronde (il n'est plus nécessaire d'ajouter une classe de transformation de cercle au code), voir la solution ci-dessous:
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);
}
}