日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

java圆形头像上传_Android自定义控件实例,圆形头像(图库 + 裁剪+设置),上传头像显示为圆形,附源码...

發布時間:2025/3/15 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java圆形头像上传_Android自定义控件实例,圆形头像(图库 + 裁剪+设置),上传头像显示为圆形,附源码... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

**

*圓形ImageView,可設置最多兩個寬度不同且顏色不同的圓形邊框。*設置顏色在xml布局文件中由自定義屬性配置參數指定*/

public class RoundImageView extendsImageView {private int mBorderThickness = 0;privateContext mContext;private int defaultColor = 0xFFFFFFFF;//如果只有其中一個有值,則只畫一個圓形邊框

private int mBorderOutsideColor = 0;private int mBorderInsideColor = 0;//控件默認長、寬

private int defaultWidth = 0;private int defaultHeight = 0;//構造方法,參數上下文

publicRoundImageView(Context context) {super(context);

mContext=context;

}publicRoundImageView(Context context, AttributeSet attrs) {super(context, attrs);

mContext=context;

setCustomAttributes(attrs);

}public RoundImageView(Context context, AttributeSet attrs, intdefStyle) {super(context, attrs, defStyle);

mContext=context;

setCustomAttributes(attrs);

}private voidsetCustomAttributes(AttributeSet attrs) {

TypedArray a=mContext.obtainStyledAttributes(attrs, R.styleable.roundedimageview);

mBorderThickness= a.getDimensionPixelSize(R.styleable.roundedimageview_border_thickness, 0);

mBorderOutsideColor=a.getColor(R.styleable.roundedimageview_border_outside_color, defaultColor);

mBorderInsideColor=a.getColor(R.styleable.roundedimageview_border_inside_color, defaultColor);

}

@Overrideprotected voidonDraw(Canvas canvas) {

Drawable drawable=getDrawable();if (drawable == null) {return;

}if (getWidth() == 0 || getHeight() == 0) {return;

}this.measure(0, 0);if (drawable.getClass() == NinePatchDrawable.class)return;

Bitmap b=((BitmapDrawable) drawable).getBitmap();

Bitmap bitmap= b.copy(Bitmap.Config.ARGB_8888, true);if (defaultWidth == 0) {

defaultWidth=getWidth();

}if (defaultHeight == 0) {

defaultHeight=getHeight();

}int radius = 0;if (mBorderInsideColor != defaultColor && mBorderOutsideColor != defaultColor) {//定義畫兩個邊框,分別為外圓邊框和內圓邊框

radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2 - 2 *mBorderThickness;//畫內圓

drawCircleBorder(canvas, radius + mBorderThickness / 2, mBorderInsideColor);//畫外圓

drawCircleBorder(canvas, radius + mBorderThickness + mBorderThickness / 2, mBorderOutsideColor);

}else if (mBorderInsideColor != defaultColor && mBorderOutsideColor == defaultColor) {//定義畫一個邊框

radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2 -mBorderThickness;

drawCircleBorder(canvas, radius+ mBorderThickness / 2, mBorderInsideColor);

}else if (mBorderInsideColor == defaultColor && mBorderOutsideColor != defaultColor) {//定義畫一個邊框

radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2 -mBorderThickness;

drawCircleBorder(canvas, radius+ mBorderThickness / 2, mBorderOutsideColor);

}else {//沒有邊框

radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2;

}

Bitmap roundBitmap=getCroppedRoundBitmap(bitmap, radius);

canvas.drawBitmap(roundBitmap, defaultWidth/ 2 - radius, defaultHeight / 2 - radius, null);

}/*** 獲取裁剪后的圓形圖片

*

*@param

*/

//radius半徑

public Bitmap getCroppedRoundBitmap(Bitmap bmp, intradius) {

Bitmap scaledSrcBmp;int diameter = radius * 2;//為了防止寬高不相等,造成圓形圖片變形,因此截取長方形中處于中間位置最大的正方形圖片

int bmpWidth =bmp.getWidth();int bmpHeight =bmp.getHeight();int squareWidth = 0, squareHeight = 0;int x = 0, y = 0;

Bitmap squareBitmap;if (bmpHeight > bmpWidth) {//高大于寬

squareWidth = squareHeight =bmpWidth;

x= 0;

y= (bmpHeight - bmpWidth) / 2;//截取正方形圖片

squareBitmap =Bitmap.createBitmap(bmp, x, y, squareWidth, squareHeight);

}else if (bmpHeight < bmpWidth) {//寬大于高

squareWidth = squareHeight =bmpHeight;

x= (bmpWidth - bmpHeight) / 2;

y= 0;

squareBitmap=Bitmap.createBitmap(bmp, x, y, squareWidth, squareHeight);

}else{

squareBitmap=bmp;

}if (squareBitmap.getWidth() != diameter || squareBitmap.getHeight() !=diameter) {

scaledSrcBmp= Bitmap.createScaledBitmap(squareBitmap, diameter, diameter, true);

}else{

scaledSrcBmp=squareBitmap;

}

Bitmap output=Bitmap.createBitmap(scaledSrcBmp.getWidth(),

scaledSrcBmp.getHeight(),

Bitmap.Config.ARGB_8888);

Canvas canvas= newCanvas(output);

Paint paint= newPaint();

Rect rect= new Rect(0, 0, scaledSrcBmp.getWidth(), scaledSrcBmp.getHeight());

paint.setAntiAlias(true);

paint.setFilterBitmap(true);

paint.setDither(true);

canvas.drawARGB(0, 0, 0, 0);

canvas.drawCircle(scaledSrcBmp.getWidth()/ 2,

scaledSrcBmp.getHeight()/ 2,

scaledSrcBmp.getWidth()/ 2,

paint);

paint.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.SRC_IN));

canvas.drawBitmap(scaledSrcBmp, rect, rect, paint);

bmp= null;

squareBitmap= null;

scaledSrcBmp= null;returnoutput;

}/*** 邊緣畫圓*/

private void drawCircleBorder(Canvas canvas, int radius, intcolor) {

Paint paint= newPaint();/*去鋸齒*/paint.setAntiAlias(true);

paint.setFilterBitmap(true);

paint.setDither(true);

paint.setColor(color);/*設置paint的 style 為STROKE:空心*/paint.setStyle(Paint.Style.STROKE);/*設置paint的外框寬度*/paint.setStrokeWidth(mBorderThickness);

canvas.drawCircle(defaultWidth/ 2, defaultHeight / 2, radius, paint);

}

}

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java圆形头像上传_Android自定义控件实例,圆形头像(图库 + 裁剪+设置),上传头像显示为圆形,附源码...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。