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

时间:2015-10-26 12:00:31

标签: android bitmap imageview drawable rounded-corners

我正在使用vinc3m1的RoundedImageView,我正在尝试创建一个包含位图的图像。
我希望ImageView被舍入,但不是我放入的位图,就像在这张照片中一样:
enter image description here

然而,这是我得到的结果: enter image description here

我在RoundedImageView上使用填充来实现这一点,View在View中包含它和一个标签;我在代码中使用填充:

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

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

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

3 个答案:

答案 0 :(得分:1)

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

您可以使用Bitmap.createScaledBitmap

要为其添加边框,您可以使用原始尺寸创建“白色”图像,然后通过叠加它们来合并这两个图像。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

.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>`