2015-10-26 33 views
1

我使用vinc3m1的RoundedImageView,我试图创建一个包含位图的图像。
我想要的ImageView被四舍五入而不是位图,我把到它,就像这个图:
enter image description hereRoundedImageView - 添加填充而不裁剪图像

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

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

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

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

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

+0

你不需要为此使用'RoundedImageView'。只需在普通ImageView中使用圆形PNG图像即可。 –

+0

发布一些xml和java代码来解决这个相对问题。你在哪里给填充值?我们怎么知道? –

+0

不幸的是我工作在一个现有的项目,我没有时间来更换所有的组件,而且,我得到的PNG将不会圆整,增加更多的细节,我的问题。 –

回答

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