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擷取圓形圖片》Android
- Android自定義設定圓形圖片控制元件Android控制元件
- android圖片處理,讓圖片變成圓形Android
- Android中將方形圖片擷取成圓形的兩種實現方式Android
- Android Xfermode 實戰 實現圓形、圓角圖片Android
- iOS圖片設定圓角iOS
- CSS圓形圖片效果CSS
- Android圓形圖片--自定義控制元件Android控制元件
- Glide實現圓角圖片,以及圓形圖片IDE
- (轉)介紹三種vmware虛擬機器網路設定方法虛擬機
- android圓形頭像的選擇和剪下並儲存出圓形圖片Android
- Android自定義View之圖片外形特效——輕鬆實現圓角和圓形圖片AndroidView特效
- css如何為圖片設定圓角CSS
- CGContextRef處理圓形圖片GCContext
- iOS圖片設定圓角效能問題iOS
- canvas繪製圓形圖案程式碼示例簡單介紹Canvas
- 微信小程式裁剪圖片成圓形微信小程式
- BitmapShader繪製圓形圖片
- 圖形驗證碼圖片樣式設定
- SVG XML 格式定義圖形入門介紹SVGXML
- 介紹幾種MySQL常見的圖形化工具MySql
- Bitmap擷取中間正方形並取出圓形圖片
- AlamofireImage 使用 – swift載入網路圖片,縮放圖片,生成圓形圖片Swift
- 微信小程式之裁剪圖片成圓形微信小程式
- CircleImageView 圓形圖片頭像實現View
- Android 繪圖和shape圓形Android繪圖
- android 圓角圖片 處理Android
- 三種解密 HTTPS 流量的方法介紹解密HTTP
- UIView設定背景圖片幾種方式UIView
- HTML中嵌入SVG圖片的N種方式,及設定大小HTMLSVG
- 記錄三種實現圖片模糊的方法
- Android常用圖片載入庫介紹及對比Android
- Android中SharedPreferences使用方法介紹Android
- 介紹三種檢視MySQL字符集的方法MySql
- Android 圓角、圓形 ImageView 實現AndroidView
- Android播放Gif動態圖片的幾種方法Android
- 三種讓網站圖片生成灰色效果的方法網站
- (譯)uCrop介紹 —— 我們自己的Android圖片裁剪庫Android