700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android自定义控件圆形图片

android自定义控件圆形图片

时间:2019-07-23 09:15:40

相关推荐

android自定义控件圆形图片

属性:

<com.example.mywechat11.MyCircleImageViewandroid:id="@+id/friend_head"android:layout_width="75dp"android:layout_height="75dp"android:layout_centerVertical="true"android:scaleType="fitXY"android:layout_marginLeft="5dp" />

自定义圆形图片:import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.Xfermode;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import androidx.appcompat.widget.AppCompatImageView;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.Paint.Align;import android.graphics.Rect;import android.graphics.RectF;import android.graphics.Shader;import android.graphics.SweepGradient;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.ColorDrawable;import android.graphics.drawable.Drawable;import .Uri;import android.text.TextPaint;import android.util.AttributeSet;import android.util.FloatMath;import android.widget.ImageView;public class MyCircleImageView extends AppCompatImageView {private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG);private Paint mPaintBorder = new Paint(Paint.ANTI_ALIAS_FLAG);private Bitmap mRawBitmap;private BitmapShader mShader;private Matrix mMatrix = new Matrix();private float mBorderWidth = dip2px(1);private int mBorderColor = 0x80bebebe;public MyCircleImageView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onDraw(Canvas canvas) {Bitmap rawBitmap = getBitmap(getDrawable());if (rawBitmap != null){int viewWidth = getWidth();int viewHeight = getHeight();int viewMinSize = Math.min(viewWidth, viewHeight);float dstWidth = viewMinSize;float dstHeight = viewMinSize;if (mShader == null || !rawBitmap.equals(mRawBitmap)){mRawBitmap = rawBitmap;mShader = new BitmapShader(mRawBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);}if (mShader != null){mMatrix.setScale((dstWidth - mBorderWidth * 2) / rawBitmap.getWidth(), (dstHeight - mBorderWidth * 2) / rawBitmap.getHeight());mShader.setLocalMatrix(mMatrix);}mPaintBitmap.setShader(mShader);mPaintBorder.setStyle(Paint.Style.STROKE);mPaintBorder.setStrokeWidth(mBorderWidth);mPaintBorder.setColor(mBorderColor);float radius = viewMinSize / 2.0f;canvas.drawCircle(radius, radius, radius - mBorderWidth / 2.0f, mPaintBorder);canvas.translate(mBorderWidth, mBorderWidth);canvas.drawCircle(radius - mBorderWidth, radius - mBorderWidth, radius - mBorderWidth, mPaintBitmap);} else {super.onDraw(canvas);}}private Bitmap getBitmap(Drawable drawable){if (drawable instanceof BitmapDrawable){return ((BitmapDrawable)drawable).getBitmap();} else if (drawable instanceof ColorDrawable){Rect rect = drawable.getBounds();int width = rect.right - rect.left;int height = rect.bottom - rect.top;int color = ((ColorDrawable)drawable).getColor();Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));return bitmap;} else {return null;}}private int dip2px(int dipVal) {float scale = getResources().getDisplayMetrics().density;return (int)(dipVal * scale + 0.5f);}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。