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>`
我正在使用 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>`