1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > android 裁剪圆角矩形 android – 如何使用中心裁剪创建部分圆角矩形可绘制而不创

android 裁剪圆角矩形 android – 如何使用中心裁剪创建部分圆角矩形可绘制而不创

时间:2023-10-17 08:14:29

相关推荐

android 裁剪圆角矩形 android – 如何使用中心裁剪创建部分圆角矩形可绘制而不创

背景

我已经看过如何用位图创建一个圆形的drawable,以及如何在它周围添加一个轮廓(AKA笔划),here.

问题

我无法找到如何在不绘制新位图的情况下仅对位图的某些角进行舍入,而不是创建新的位图,并且仍然可以用于中心裁剪ImageView.

我发现了什么

这是我发现的,但它确实创建了一个新的位图,并在带有center-crop的imageView中使用它(源here):

/**

* Create rounded corner bitmap from original bitmap.

*

* @param input Original bitmap.

* @param cornerRadius Corner radius in pixel.

* @param squareTL,squareTR,squareBL,squareBR where to use square corners instead of rounded ones.

*/

public static Bitmap getRoundedCornerBitmap(final Bitmap input, final float cornerRadius, final int w, final int h,

final boolean squareTL, final boolean squareTR, final boolean squareBL, final boolean squareBR) {

final Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);

final Canvas canvas = new Canvas(output);

final int color = 0xff424242;

final Rect rect = new Rect(0, 0, w, h);

final RectF rectF = new RectF(rect);

// make sure that our rounded corner is scaled appropriately

Paint paint = new Paint();

paint.setXfermode(null);

paint.setAntiAlias(true);

canvas.drawARGB(0, 0, 0, 0);

paint.setColor(color);

canvas.drawRoundRect(rectF, cornerRadius, cornerRadius, paint);

// draw rectangles over the corners we want to be square

if (squareTL)

canvas.drawRect(0, 0, w / 2, h / 2, paint);

if (squareTR)

canvas.drawRect(w / 2, 0, w, h / 2, paint);

if (squareBL)

canvas.drawRect(0, h / 2, w / 2, h, paint);

if (squareBR)

canvas.drawRect(w / 2, h / 2, w, h, paint);

paint.setXfermode(PORTER_DUFF_XFERMODE_SRC_IN);

canvas.drawBitmap(input, 0, 0, paint);

return output;

}

而且,这是我发现创建一个可以在各个角落起作用的圆角可绘制的东西:

public static class RoundedCornersDrawable extends Drawable {

private final float mCornerRadius;

private final RectF mRect = new RectF();

private final BitmapShader mBitmapShader;

private final Paint mPaint;

public RoundedCornersDrawable(final Bitmap bitmap, final float cornerRadius) {

mCornerRadius = cornerRadius;

mBitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP,

Shader.TileMode.CLAMP);

mPaint = new Paint();

mPaint.setAntiAlias(false);

mPaint.setShader(mBitmapShader);

mRect.set(0, 0, bitmap.getWidth(), bitmap.getHeight());

}

@Override

protected void onBoundsChange(final Rect bounds) {

super.onBoundsChange(bounds);

mRect.set(0, 0, bounds.width(), bounds.height());

}

@Override

public void draw(final Canvas canvas) {

canvas.drawRoundRect(mRect, mCornerRadius, mCornerRadius, mPaint);

}

@Override

public int getOpacity() {

return PixelFormat.TRANSLUCENT;

}

@Override

public void setAlpha(final int alpha) {

mPaint.setAlpha(alpha);

}

@Override

public void setColorFilter(final ColorFilter cf) {

mPaint.setColorFilter(cf);

}

}

但是,如果imageView显示内容,同时保持与位图相同的宽高比,并且其大小也是预先确定的,则此解决方案才有效.

这个问题

如何创建一个中心裁剪的drawable,它显示一个位图,具有特定角落的圆角,并且还能够显示它周围的轮廓/笔划?

我想这样做而不创建新的位图或扩展ImageView.仅使用具有位图作为输入的drawable.

android 裁剪圆角矩形 android – 如何使用中心裁剪创建部分圆角矩形可绘制而不创建新位图?...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。