Android中圖片圓形設定三種方法介紹
Android開發中經常會用到圓形圖片,比如在使用者頭像設定,現在提供三種主要實現方式:
方案一:使用第三方影像框架 Fresco
1、新增依賴
dependencies {
compile 'com.facebook.fresco:fresco:0.14.1'
}
2、初始化
public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
3、修改 manifest
android:name=".MyApplication"
4、新增網路許可權
<uses-permission android:name="android.permission.INTERNET"/>
5、檔案佈局
需要新增名稱空間
xmlns:fresco="http://schemas.android.com/apk/res-auto"
引入
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/drawee_img"
fresco:roundAsCircle="true"
fresco:roundedCornerRadius="20dp"
android:layout_width="80dp"
android:layout_height="80dp" />
6、使用
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.drawee_img);
Uri uri = Uri.parse("http://p7.qhimg.com/dr/200_200_/t01b2e3a907f6ecc29d.jpg");
draweeView.setImageURI(uri);
方案二:自定義View
public class CircleImageView extends ImageView {
private Paint mPaint; //畫筆
private int mRadius; //圓形圖片的半徑
private float mScale; //圖片的縮放比例
public CircleImageView(Context context) {
super(context);
}
public CircleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//因為是圓形圖片,所以應該讓寬高保持一致
int size = Math.min(getMeasuredWidth(), getMeasuredHeight());
mRadius = size / 2;
setMeasuredDimension(size, size);
}
@Override
protected void onDraw(Canvas canvas) {
mPaint = new Paint();
Bitmap bitmap = drawableToBitmap(getDrawable());
//初始化BitmapShader,傳入bitmap物件
BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
//計算縮放比例
mScale = (mRadius * 2.0f) / Math.min(bitmap.getHeight(), bitmap.getWidth());
Matrix matrix = new Matrix();
matrix.setScale(mScale, mScale);
bitmapShader.setLocalMatrix(matrix);
mPaint.setShader(bitmapShader);
//畫圓形,指定好中心點座標、半徑、畫筆
canvas.drawCircle(mRadius, mRadius, mRadius, mPaint);
}
//寫一個drawble轉BitMap的方法
private Bitmap drawableToBitmap(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;
}
}
使用:
<mgzxc.cn.module2.CircleImageView
android:id="@+id/image1"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_centerInParent="true"
android:scaleType="centerCrop"
android:src="@drawable/gangtiexia"
/>
方案三:進行圖片剪下
方式一
public static Bitmap createCircleImage(Bitmap source) {
int length = source.getWidth() < source.getHeight() ? source.getWidth() : source.getHeight();
Paint paint = new Paint();
paint.setAntiAlias(true);
Bitmap target = Bitmap.createBitmap(length, length, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(target);
canvas.drawCircle(length / 2, length / 2, length / 2, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(source, 0, 0, paint);
return target;
}
方式二:
public static Bitmap createCircleImage(Bitmap source) {
int width = source.getWidth();
int height = source.getHeight();
float raduis = Math.min(width, height) * 0.5f;
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
//paint.setColor(Color.RED);
//畫布設定遮罩效果
paint.setShader(new BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));
//處理影像資料
Bitmap bitmap = Bitmap.createBitmap(width, height, source.getConfig());
Canvas canvas = new Canvas(bitmap);
//bitmap的顯示由畫筆paint來決定
canvas.drawCircle(width * 0.5f, height *0.5f, raduis, paint);
return bitmap;
}
與Picasso結合使用:
Picasso.with(mContext).load(Constant.format(headUrl)).transform(new Transformation() {
@Override
public Bitmap transform(Bitmap source) {
source=createCircleImage(source);
source.recycle();
return bitmap;
}
//Picasso快取bitmap,下次獲取bitmap, 通過key
//第一次呼叫用key 存入
//第二次呼叫用key去取
@Override
public String key() {
Log.d(TAG, "key() called");
return "key";
}
}).into(meHeader);
相關文章
- android圖片處理,讓圖片變成圓形Android
- Glide實現圓角圖片,以及圓形圖片IDE
- CSS圓形圖片效果CSS
- Android自定義View之圖片外形特效——輕鬆實現圓角和圓形圖片AndroidView特效
- CGContextRef處理圓形圖片GCContext
- css如何為圖片設定圓角CSS
- 圖形驗證碼圖片樣式設定
- SVG XML 格式定義圖形入門介紹SVGXML
- 介紹幾種MySQL常見的圖形化工具MySql
- Android常用圖片載入庫介紹及對比Android
- UIView設定背景圖片幾種方式UIView
- 微信小程式裁剪圖片成圓形微信小程式
- Android 圖形架構簡介Android架構
- Android之背景圖片設定為重複Android
- Android上一種效果奇好的混音方法介紹Android
- 微信小程式之裁剪圖片成圓形微信小程式
- HTML中嵌入SVG圖片的N種方式,及設定大小HTMLSVG
- Android 圓角、圓形 ImageView 實現AndroidView
- Android 載入網路圖片 以及實現圓角圖片效果Android
- 標準圓形餅圖Python繪製方法Python
- MongoDB Sharding Balancer介紹和設定方法舉例MongoDB
- Swiper幻燈片設定圖片自動高度的方法
- Android兩種簡單的載入GIF圖片的方法Android
- Android之TextView設定drawableRight等圖片文字間隔AndroidTextView
- Windows設定圖片縮圖Windows
- MongoDB三種聚合命令用法介紹MongoDB
- 圖片格式及空間的介紹
- idea怎麼設定為中文2022 intellijidea最新設定為中文方法介紹IdeaIntelliJ
- 簡單介紹Golang切片刪除指定元素的三種方法Golang
- Dreamweaver中CSS怎麼製作徑向圓形漸變的五種方法CSS
- vscode設定背景圖片VSCode
- Android 開發:glide圓角,圓形,效率問題AndroidIDE
- ECharts 樣式設定介紹Echarts
- Android packageManager.setComponentEnabledSetting()和setApplicationEnabledSetting()方法介紹AndroidPackageAPP
- Reacvt-Native 圖片下載使用介紹
- Android自定義圓形進度條Android
- Android 圓形ProgressBar 改變顏色Android
- 使用 HTML5 Canvas 實現圓形圖片裁剪並上傳HTMLCanvas