【问题标题】:Using picasso library with a circle image view使用带有圆形图像视图的毕加索库
【发布时间】:2015-06-05 10:27:39
【问题描述】:

我正在考虑使用 Picasso 库从 URL 下载图像并将其传递到圆形图像视图中,但由于 picasso 要求您传入实际的 imageView,因此我对如何执行此操作停滞不前

我正在使用这里的毕加索图书馆http://square.github.io/picasso/ 和来自这里的圆形图像视图类https://github.com/hdodenhof/CircleImageView

这是我获取图像的代码的开始

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

}

编辑:

这是 circleImageView 的 xml

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

【问题讨论】:

    标签: android imageview picasso


    【解决方案1】:

    我认为您不需要 CircleImageView 库

    您可以实施循环变换检查以下要点

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

    然后

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

    【讨论】:

    • 谢谢你这个工作,但是我选择了另一个条目作为我的答案,因为它允许我仍然保持 circleImageView 周围的边框
    • 没问题,您也可以使用转换来处理边框。请检查上述要点上的 cmets 或参考 gist.github.com/berkkaraoglu/ab4caa8b1fe48231dec2
    【解决方案2】:

    使用这个

    活动类

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

    布局文件

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

    这工作正常。

    【讨论】:

      【解决方案3】:

      使用此代码创建循环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;
      }
      
      }
      

      【讨论】:

        【解决方案4】:

        先取CircleImageView的ID:

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

        并将 ID 传递给毕加索图书馆:

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

        这对我有用。

        【讨论】:

          【解决方案5】:

          我创建了一个目标类,它使用原生 Android 的 RoundedBitmapDrawable 类使图像变圆(无需在代码中添加圆形变换类),请参见下面的解决方案:

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

          【讨论】:

            猜你喜欢
            • 2017-05-17
            • 2019-05-13
            • 2014-11-24
            • 2018-03-02
            • 1970-01-01
            • 1970-01-01
            • 2017-06-15
            • 2016-02-02
            • 2019-02-08
            相关资源
            最近更新 更多