2015-06-05 15 views
16

Przyglądam się użyciu biblioteki Picassa, aby pobrać obraz z adresu URL i przekazać go do widoku obrazu w kręgu, ale ponieważ Picasso wymaga podania prawdziwego obrazu, stanąłem w bezruchu w jaki sposób to zrobićUżywanie biblioteki picasso z widokiem obrazu z okręgu

używam biblioteki Picasso stąd http://square.github.io/picasso/ i koło zdjęcie Zobacz klasę stąd https://github.com/hdodenhof/CircleImageView

oto początek mojego kodu, aby uzyskać obraz

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:

oto xml dla 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" 

Odpowiedz

16

Użyj tego

aktywny Klasa

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

Układ pliku

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

To działa dobrze.

24

Nie sądzę wymagają CircleImageView bibliotekę

można zaimplementować Circular Transformation sprawdź poniżej istotę

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

następnie

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

Dziękuję to działało, jednak Wybrałem drugi wpis jako moją odpowiedź, ponieważ pozwolił mi on nadal utrzymywać granicę wokół kręguImageView – MichaelStoddart

+3

Bez problemów, możesz obsłużyć obramowanie również za pomocą transformacji. Proszę sprawdzić komentarze na powyższym tekście lub ref. Https://gist.github.com/berkkaraoglu/ab4caa8b1fe48231dec2 –

2

użyć tego kodu, aby utworzyć Circular 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

Take identyfikator CircleImageView pierwsze:

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

i przekazać identyfikator do Picassa Biblioteka:

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

To zadziałało dla mnie.

1

Stworzyłem klasę docelową, która używa RoundedBitmapDrawable klasę macierzystego Androida, aby cały obraz (usuwa potrzebę dodania koło przekształcić klasę do kodu), patrz rozwiązanie poniżej:

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

}