Rounded corners with Picasso

后端 未结 4 1107
被撕碎了的回忆
被撕碎了的回忆 2020-12-15 09:02

Is there a reasonable way to do rounded corners with Picasso that

  1. Doesn\'t significantly slow down drawing
  2. Works with hardware layers
  3. Doesn\'t create a
4条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-15 09:23

    this will work for any image of any size--

    1) first create an empty image container for different resolution 2) then on runtime get its height and width by this-------

    BitmapFactory.Options dimensions = new BitmapFactory.Options(); 
    dimensions.inJustDecodeBounds = true;
    Bitmap mBitmap = BitmapFactory.decodeResource(activity.getResources(), R.drawable.icon, dimensions);
            int height = dimensions.outHeight;
            int width =  dimensions.outWidth;
    

    3)

    Picasso.with(getActivity())
                .load(url)
                .error(R.drawable.image2)
                .placeholder(R.drawable.ic_drawer)
               .resize(width, height )
                .transform(new ImageTrans_roundedcorner())
                .into(imageView1);
    

    4) now transformation class----

    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.PorterDuff.Mode;
    import android.graphics.PorterDuffXfermode;
    import android.graphics.Bitmap.Config;
    import android.graphics.Rect;
    import android.graphics.RectF;
    import com.squareup.picasso.Transformation;
    
    public class ImageTrans_roundedcorner implements Transformation{
    
        private int mBorderSize=10;
        private int mCornerRadius = 20;
        private int mColor=Color.BLACK;
    
        @Override
        public Bitmap transform(Bitmap source) {
            // TODO Auto-generated method stub
            Bitmap output = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Config.ARGB_8888);
            Canvas canvas = new Canvas(output);
    
            final int color = 0xff424242;
            final Paint paint = new Paint();
            final Rect rect = new Rect(0, 0, source.getWidth(), source.getHeight());
            final RectF rectF = new RectF(rect);
            final float roundPx = mCornerRadius;
    
            paint.setAntiAlias(true);
            canvas.drawARGB(0, 0, 0, 0);
            paint.setColor(color);
            canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
    
            paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
            canvas.drawBitmap(source, rect, rect, paint);
    
         // draw border
            paint.setColor(color);
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeWidth((float) mBorderSize);
            canvas.drawRoundRect(rectF, mCornerRadius, mCornerRadius, paint);
            //-------------------
    
                if(source != output) source.recycle();
    
                return output;
        }
    
        @Override
        public String key() {
            // TODO Auto-generated method stub
            return "grayscaleTransformation()";
        }
    
    }
    

提交回复
热议问题