您的位置:首页 > 移动开发 > Android开发

Android笔记 圆形ImageView

2016-05-11 10:18 441 查看
通过直接继承ImageView,使用BitmapShader圆形绘制实现。具体的可看鸿洋大大的博客:/article/1580281.html

直接上代码

package com.bencoo.kme.widget;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;

public class CircleImageView extends ImageView {
/**
* 宽度
*/
private int mWidth;
/**
* 圆半径
*/
private int mRadius;
/**
* 矩阵
*/
private Matrix mMatrix;
/**
* 渲染图形 给图像着色
*/
private BitmapShader mShader;
/**
* 笔
*/
private Paint mBitmapPaint;
public CircleImageView(Context context) {
super(context);
init();
}

public CircleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

public CircleImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
/**
* @description 初始化
*/
private void init(){
mMatrix=new Matrix();
mBitmapPaint=new Paint();
mBitmapPaint.setAntiAlias(true);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
mWidth=Math.min(getMeasuredWidth(), getMeasuredHeight());
mRadius=mWidth/2;
setMeasuredDimension(mWidth, mWidth);
}
/**
* @description Drawable转成Bitmap
* @param drawable
* @return
*/
private Bitmap drawableToBitmap(Drawable drawable){
if(drawable instanceof BitmapDrawable){
BitmapDrawable bd=(BitmapDrawable) drawable;
return bd.getBitmap();
}
int width=drawable.getIntrinsicWidth();
int height=drawable.getIntrinsicHeight();
Bitmap bitmap=Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas=new Canvas(bitmap);
drawable.setBounds(0,0,width,height);
drawable.draw(canvas);
return bitmap;

}
/**
* @description 初始Shader
*/
private void setUpShader(){
Drawable drawable=getDrawable();
if(drawable==null){
return;
}
Bitmap bitmap=drawableToBitmap(drawable);
mShader=new BitmapShader(bitmap, TileMode.CLAMP, TileMode.CLAMP);
int width=bitmap.getWidth();
int height=bitmap.getHeight();
//计算缩放比例
float scale=1.0f;
int bSize=Math.min(width, height);
scale=mWidth*1.0f/bSize;
//矩阵
mMatrix.setScale(scale, scale);
//Shader设置矩阵
mShader.setLocalMatrix(mMatrix);
//给笔设置Shader
mBitmapPaint.setShader(mShader);

}
@Override
protected void onDraw(Canvas canvas) {
Drawable drawable=getDrawable();
if(drawable==null){
return;
}
setUpShader();
canvas.drawCircle(mRadius, mRadius, mRadius, mBitmapPaint);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: