BitmapShader描述:
Shader used to draw a bitmap as a texture. The bitmap can be repeated or mirrored by setting the tiling mode.
用来将bitmap 绘制为纹理的着色器。通过设置平铺模式,位图可以重复或镜像
BitmapShader是Shader的子类
BitmapShader
ComposeShader
LinearGradient
RadialGradient
SweepGradient
其他之类逐一学习使用..

test111.png
这是原图 我们要的效果是这样

Screenshot_20170629113943.png
创建一个CircleImageView继承ImageView
主要重写
onDraw
onMeasure
这两个方法
1@Override 2 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 3 super.onMeasure(widthMeasureSpec, heightMeasureSpec); 4 //取宽度或者高度的最小值 5 int size = Math.min(getMeasuredWidth(), getMeasuredHeight()); 6 mRadius = size / 2; 7 setMeasuredDimension(size, size); 8 }
private float mScale;
private int mRadius; //圆形图片的半径
BitmapShader mBitmapShader;
Paint mBitmapPaint;
@Override
protected void onDraw(Canvas canvas) {
//创建一个画笔
mBitmapPaint = new Paint();
//把Drawable转化为Bitmap
Bitmap bitmap = getBitmapFromDrawable(getDrawable());
//设置一个BitmapShader
//Shader.TileMode.CLAMP 当所画图形的尺寸大于Bitmap的尺寸的时候,会用Bitmap四边的颜色填充剩余空间
//REPEAT 重复平铺整个绘制的区域
//MIRROR 镜像平铺整个绘制的区
mBitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP,
Shader.TileMode.CLAMP);
//计算缩放比例
mScale = ((mRadius * 2.0f) / Math.min(bitmap.getHeight(), bitmap.getWidth()));
//可以保证显示的时候图片内容照应Shader大小,否者图片显示偏移
Matrix matrix = new Matrix();
matrix.setScale(mScale, mScale);
mBitmapShader.setLocalMatrix(matrix);
//添加Shader
mBitmapPaint.setShader(mBitmapShader);
//画圆
canvas.drawCircle(mRadius, mRadius, mRadius,
mBitmapPaint);
}
1 private Bitmap getBitmapFromDrawable(Drawable drawable) { 2 if (drawable == null) { 3 return null; 4 } 5 if (drawable instanceof BitmapDrawable) { 6 return ((BitmapDrawable) drawable).getBitmap(); 7 } 8 Bitmap bitmap; 9 bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), 10 drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 11 Canvas canvas = new Canvas(bitmap); 12 drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 13 drawable.draw(canvas); 14 return bitmap; 15 16 } 17```
