自定义圆形图标控件

来源:互联网 发布:数据库和关系数据库 编辑:程序博客网 时间:2024/05/21 10:20

直接上代码:

package com.android.systemui.recent;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.Shader.TileMode;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.graphics.drawable.ShapeDrawable;import android.graphics.drawable.shapes.OvalShape;import android.util.AttributeSet;import android.widget.ImageView;public class CircleIconImage extends ImageView {private static final int SIZE_VIEW = 109;private static final int SIZE_DRAWABLE = 109;private static final int SIZE_DRAWABLE_MIN = 109;private Matrix mMatrix;private BitmapShader mBitmapShader;@SuppressLint("NewApi")public CircleIconImage(Context context, AttributeSet attrs) {super(context, attrs);mMatrix = new Matrix();setScaleType(ScaleType.CENTER_INSIDE);}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsetUpShader(canvas);}private void setUpShader(Canvas canvas) {Drawable drawable = getDrawable();if (drawable == null) {return;}Bitmap bmp = drawableToBitamp(drawable);mBitmapShader = new BitmapShader(bmp, TileMode.CLAMP, TileMode.CLAMP);float scale = 1.0f;int bSize = Math.min(bmp.getWidth(), bmp.getHeight());final int offset;if (bSize > SIZE_DRAWABLE) {scale = SIZE_DRAWABLE * 1.0f / bSize;offset = (SIZE_VIEW - SIZE_DRAWABLE) / 2;} else if (bSize < SIZE_DRAWABLE_MIN) {scale = SIZE_DRAWABLE_MIN * 1.0f / bSize;offset = (SIZE_VIEW - SIZE_DRAWABLE_MIN) / 2;} else {offset = (SIZE_VIEW - bSize) / 2;}ShapeDrawable shape = new ShapeDrawable(new OvalShape());mMatrix.setScale(scale, scale);mBitmapShader.setLocalMatrix(mMatrix);shape.getPaint().setAntiAlias(true);shape.getPaint().setDither(true);shape.getPaint().setShader(mBitmapShader);shape.setBounds(0 + offset, 0 + offset, SIZE_VIEW - offset, SIZE_VIEW - offset);shape.draw(canvas);}private Bitmap drawableToBitamp(Drawable drawable) {if (drawable instanceof BitmapDrawable) {BitmapDrawable bd = (BitmapDrawable) drawable;return bd.getBitmap();}int w = drawable.getIntrinsicWidth();int h = drawable.getIntrinsicHeight();Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);drawable.setBounds(0, 0, w, h);drawable.draw(canvas);return bitmap;}}


直接在xml布局里引用就可以了。


原创粉丝点击