RoundedImageView - 添加填充而不裁剪图像

RoundedImageView - add padding without cropping the image

我正在使用 vinc3m1 的 RoundedImageView,我正在尝试创建一个包含位图的图像。
我希望 ImageView 是圆形的,但不是我放入其中的位图,如下图所示:

但是,这是我得到的结果:

我在 RoundedImageView 上使用填充来实现此目的,该视图位于包含它和标签的视图中;我在这样的代码中使用填充:

int dpPadding = Utils.dpToPx(25); view.getImage().setPadding(dpPadding,dpPadding,dpPadding,dpPadding);

我看到了填充,但我不希望里面的图像有圆角,只有背景。

虽然这可能不是最好的方法,但有人可以帮忙吗?

You can use this...

public class RoundImage extends Drawable {
      private final Bitmap mBitmap;
      private final Paint mPaint;
      private final RectF mRectF;
      private final int mBitmapWidth;
      private final int mBitmapHeight;

      public RoundImage(Bitmap bitmap) {
            mBitmap = bitmap;
            mRectF = new RectF();
            mPaint = new Paint();
            mPaint.setAntiAlias(true);
            mPaint.setDither(true);
            final BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR);
            mPaint.setShader(shader);

            mBitmapWidth = (int) 240;
            mBitmapHeight =  (int) 240;
      }

      @Override
      public void draw(Canvas canvas) {
            canvas.drawOval(mRectF, mPaint);
      }

      @Override
      protected void onBoundsChange(Rect bounds) {
            super.onBoundsChange(bounds);
            mRectF.set(bounds);
      }

      @Override
      public void setAlpha(int alpha) {
            if (mPaint.getAlpha() != alpha) {
                  mPaint.setAlpha(alpha);
                  invalidateSelf();
            }
      }

      @Override
      public void setColorFilter(ColorFilter cf) {
            mPaint.setColorFilter(cf);
      }

      @Override
      public int getOpacity() {
            return PixelFormat.TRANSLUCENT;
      }

      @Override
      public int getIntrinsicWidth() {
            return mBitmapWidth;
      }

      @Override
      public int getIntrinsicHeight() {
            return mBitmapHeight;
      }

      public void setAntiAlias(boolean aa) {
            mPaint.setAntiAlias(aa);
            invalidateSelf();
      }

      @Override
      public void setFilterBitmap(boolean filter) {
            mPaint.setFilterBitmap(filter);
            invalidateSelf();
      }

      @Override
      public void setDither(boolean dither) {
            mPaint.setDither(dither);
            invalidateSelf();
      }

      public Bitmap getBitmap() {
            return mBitmap;
      }
    enter code here

}


// Use like this
imageview.setBackgroundDrawable(new RoundImage(bitmapimage));

缩小图像并为其添加边框(以填充缩放留下的 space)。

您可以使用 Bitmap.createScaledBitmap

要为其添加边框,您可以创建一个具有原始大小的 "white" 图像,然后通过叠加将两个图像合并。

然后保存它并在您的 RoundedImageView 中使用它。

我使用此方法为我的图像添加一些填充:

.RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content">

    <com.makeramen.roundedimageview.RoundedImageView
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:scaleType="fitCenter"
        android:src="@color/transparent"
        app:riv_border_color="@color/colorWhite"
        app:riv_border_width="2dip"
        app:riv_corner_radius="25dp"
        app:riv_oval="true" />

    <ImageView
        android:id="@+id/listimage"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:padding="16dp"
        android:src="@drawable/search" />
</RelativeLayout>`