圆角图片以及特殊形状的图片绘制方法

今天研究了一下圆角图片与布局,布局的话可以直接使用shape来完成,定义一个myshape.xml,来定义圆角

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#fff"/>
<corners android:radius="32px"/>
<padding android:bottom="5px"/>
<padding android:top="5px"/>
<padding android:left="5px"/>
<gradient android:gradientRadius="50" android:startColor="#aabbcc"
android:endColor="#ffffff"
android:type="linear"
android:angle="270"

/>
</shape>


以上代码是定义一个带有圆角的形状 corners用来定义圆角的半径, gradient用来设置渐变. 讲myshape.xml放入到drawable文件夹下.
然后在布局中引用 直接使用android:background="@drawable/myshape"即可,作为背景使用就好.

圆角图片最开始瞎忙乎了几个小时,一心就像完全可以通过shape来实现,后来发现ImageView在应用Shape背景后,它的绘制区域还是一个正方形.
要实现圆角图片两种方法:
1.使用canvas重绘与Path重绘
2.继承ImageView 在onDraw方法中绘制 (与上面的方法基本相同,只是不需要在将图片处理的代码放到逻辑中了)

我比较懒,使用第一种方式非常是和我这样的懒人.

pngBM为原始的图片对象
Bitmap src = pngBM.copy(Bitmap.Config.ARGB_8888, true);
dest = Bitmap.createBitmap(pngBM.getWidth(), pngBM.getHeight(), Bitmap.Config.ARGB_8888);
int radius = pngBM.getWidth() / 2;//src为我们要画上去的图,跟上一个示例中的bitmap一样。
if(pngBM.getWidth()>pngBM.getHeight()) {
radius = pngBM.getHeight()/2;
}


Canvas c = new Canvas(dest);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
Path path = new Path();
path.addCircle(radius, radius, radius, Path.Direction.CW);
c.clipPath(path); //裁剪区域
c.drawBitmap(src, 0, 0, paint);//把图画上去

使用一张新的画布来从新按照圆形的Path绘制! Path可以实现任意形状的绘制!


原文地址:https://www.cnblogs.com/raffeale/p/4630594.html