2015-06-05 9 views
16

Sto cercando di utilizzare la libreria Picasso per scaricare un'immagine dall'URL e passare questa immagine alla vista immagine circolare, ma poiché Picasso richiede che tu passi in un'immagine effettiva, mi sono fermato su come farloUso della libreria picasso con una vista immagine circolare

sto usando la libreria picasso da qui http://square.github.io/picasso/ e l'immagine cerchio vista della classe da qui https://github.com/hdodenhof/CircleImageView

Ecco l'inizio del mio codice per ottenere l'immagine

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(); 

} 

Edit:

qui è la XML per la 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" 

risposta

16

Usa questa

Attività Classe

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); 
    } 
} 

layout File

<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" /> 

Funziona bene.

24

Non credo che avete bisogno di CircleImageView biblioteca

è possibile implementare Trasformazione circolare controllare il senso di sotto

https://gist.github.com/julianshen/5829333

quindi

Picasso.with(activity).load(image link here) 
    .transform(new CircleTransform()).into(ImageView); 
+0

Grazie questo ha funzionato, però Ho scelto l'altra voce come risposta, perché mi permetteva di mantenere il bordo attorno al cerchio. ImageView – MichaelStoddart

+3

Nessun problema, puoi gestire il confine anche usando la trasformazione. Si prega di controllare i commenti sul gist sopra o ref https://gist.github.com/berkkaraoglu/ab4caa8b1fe48231dec2 –

2

Usa questo codice per creare circolare 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; 
} 

} 
1

Prendere l'ID della CircleImageView prima:

CircleImageView mCircleImageView = (CircleImageView)findViewById(R.id.circleImageView); 

e passare l'ID a Picasso libreria:

Picasso.with(mContext).load(Uri.parse(link)).placeholder(drawable).into(mCircleImageView); 

Questo ha funzionato per me.

1

Ho creato una classe di destinazione che utilizza classe nativa di Android RoundedBitmapDrawable per rendere l'immagine rotonda (elimina la necessità di aggiungere un cerchio trasformare classe per il codice), vedi soluzione qui di seguito:

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); 
    } 

} 
Problemi correlati