android 裁剪圆角矩形,android – 如何使用中心裁剪创建部分圆角矩形可绘制而不创建新位图?...
背景
我已經(jīng)看過(guò)如何用位圖創(chuàng)建一個(gè)圓形的drawable,以及如何在它周圍添加一個(gè)輪廓(AKA筆劃),here.
問(wèn)題
我無(wú)法找到如何在不繪制新位圖的情況下僅對(duì)位圖的某些角進(jìn)行舍入,而不是創(chuàng)建新的位圖,并且仍然可以用于中心裁剪ImageView.
我發(fā)現(xiàn)了什么
這是我發(fā)現(xiàn)的,但它確實(shí)創(chuàng)建了一個(gè)新的位圖,并在帶有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;
}
而且,這是我發(fā)現(xiàn)創(chuàng)建一個(gè)可以在各個(gè)角落起作用的圓角可繪制的東西:
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顯示內(nèi)容,同時(shí)保持與位圖相同的寬高比,并且其大小也是預(yù)先確定的,則此解決方案才有效.
這個(gè)問(wèn)題
如何創(chuàng)建一個(gè)中心裁剪的drawable,它顯示一個(gè)位圖,具有特定角落的圓角,并且還能夠顯示它周圍的輪廓/筆劃?
我想這樣做而不創(chuàng)建新的位圖或擴(kuò)展ImageView.僅使用具有位圖作為輸入的drawable.
總結(jié)
以上是生活随笔為你收集整理的android 裁剪圆角矩形,android – 如何使用中心裁剪创建部分圆角矩形可绘制而不创建新位图?...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 脸上发痒是什么原因
- 下一篇: 内拿舒儿童鼻喷雾剂是什么