Android圆角图片汇总

今天来对图片的圆角处理作一个简单小结,不少app里面都有圆角效果,根据不一样的场景能够采用不一样的方案,目前来讲有三种方案是比较经常使用的html

方案一 .9.pngjava

应用场景:1.目标图片已知;2.针对布局背景;android

实现:canvas

.9.png是最简单的方法,只须要用draw9patch准备好相应的.9图,设置为控件的背景便可.app

参考:http://developer.android.com/tools/help/draw9patch.html布局

方案二 剪裁Bitmapui

应用场景:1.图片事先没法预知;2.图片不是很是大 + 方案一场景spa

实现:htm

这里的剪裁指的是根据原图咱们本身生成一张新的bitmap,这个时候指定图片的目标区域为一个圆角局域。这种作法有一点须要生成一个新的bitmap,因此会消耗至少2倍的图片内存,图片

下面分析一下代码的含义:

a.首先建立一个指定高宽的bitmap,做为输出的内容,

b.而后建立一个相同大小的矩形,利用画布绘制时指定圆角角度,这样画布上就有了一个圆角矩形。

c.最后就是设置画笔的剪裁方式为Mode.SRC_IN,将原图叠加到画布上,

这样输出的bitmap就是原图在矩形局域内的内容。

  public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
        bitmap.getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(output);
 
    final int color = 0xff424242;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
    final RectF rectF = new RectF(rect);
    final float roundPx = 12;
 
    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
 
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);
 
    return output;
  }

参考:http://ruibm.com/?p=184

方案三 直接绘制圆角bitmap

应用场景:同方案二

这个写法是android team的成员写出来的,特色就是不用不须要额外在建立一个图片,这里把原图构形成了一个BitmapShader,而后就能够用画布直接画出圆角的内容

BitmapShader shader;shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

Paint paint = new Paint();

paint.setAntiAlias(true);

paint.setShader(shader);

RectF rect = new RectF(0.0f, 0.0f, width, height);

// rect contains the bounds of the shape

// radius is the radius in pixels of the rounded corners

// paint contains the shader that will texture the shape

canvas.drawRoundRect(rect, radius, radius, paint);

参考:http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners/

相关文章
相关标签/搜索