Android自定義帶圓角的ImageView
最近有一個(gè)實(shí)現(xiàn)一個(gè)帶有圓角的ImageView的需求,在網(wǎng)上找了找三方,雖然Demo都是正確的,但是移植過(guò)來(lái)就不可以了,因?yàn)檎?qǐng)求鏈接的時(shí)候用的是xUtils中Bitmap來(lái)進(jìn)行解析的,這樣就總是會(huì)報(bào)類型轉(zhuǎn)換異常的錯(cuò)誤。
就這樣只能自己定義一個(gè)了.
Demo:
package com.yizooo.yizooo.ui;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.RectF;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
import com.lidroid.xutils.bitmap.core.AsyncDrawable;
/**
* Created by 雪寶寶 on 2016/3/27.
* 自定義圓角工具
*/
public class RoundImageView extends ImageView {
private Paint paint;
public RoundImageView(Context context) {
this(context,null);
}
public RoundImageView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public RoundImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
paint = new Paint();
}
/**
* 繪制圓角矩形圖片
*/
@Override
protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
Bitmap bitmap = null;
if (null != drawable && drawable instanceof BitmapDrawable ) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
bitmap = bitmapDrawable.getBitmap();
//Bitmap bitmap =( (BitmapDrawable)drawable).getBitmap();
Bitmap b = getRoundBitmap(bitmap, 10);
final Rect rectSrc = new Rect(0, 0, b.getWidth(), b.getHeight());
final Rect rectDest = new Rect(0,0,getWidth(),getHeight());
paint.reset();
canvas.drawBitmap(b, rectSrc, rectDest, paint);
}//防止出現(xiàn)類型轉(zhuǎn)換異常
else if(this.getDrawable() instanceof AsyncDrawable){
bitmap = Bitmap
.createBitmap(
getWidth(),
getHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas1 = new Canvas(bitmap);
// canvas.setBitmap(bitmap);
drawable.setBounds(0, 0, getWidth(),
getHeight());
drawable.draw(canvas1);
}
else {
super.onDraw(canvas);
}
}
/**
* 獲取圓角矩形圖片方法
* @param bitmap
* @param roundPx,一般設(shè)置成14
* @return Bitmap
* @author caizhiming
*/
private Bitmap getRoundBitmap(Bitmap bitmap, int roundPx) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
int x = bitmap.getWidth();
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swipelayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<com.yizooo.yizooo.ui.RoundImageView
android:id="@+id/item_frag_news_icon"
android:layout_width="@dimen/dp_47"
android:layout_height="@dimen/dp_50"
android:scaleType="fitXY"
android:src="@mipmap/fuwutongzhi"
android:layout_margin="@dimen/dp_10"
/>
</RelativeLayout>
最終的效果圖就不發(fā)照片了,各位朋友嘗試一下就可以看出效果圖了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
android studio 清單配置文件androidmainfest.xml詳細(xì)解讀
AndroidManifest官方解釋是應(yīng)用清單,每個(gè)應(yīng)用的根目錄中都必須包含一個(gè),并且文件名必須一模一樣,這個(gè)文件中包含了APP的配置信息,系統(tǒng)需要根據(jù)里面的內(nèi)容運(yùn)行APP的代碼,顯示界面,這篇文章介紹了android studio 清單配置文件androidmainfest.xml解讀,需要的朋友可以參考下2024-04-04
Android自定義SwipeLayout仿QQ側(cè)滑條目
這篇文章主要為大家詳細(xì)介紹了Android自定義SwipeLayout仿QQ側(cè)滑條目,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08
Android組件之DrawerLayout實(shí)現(xiàn)抽屜菜單
DrawerLayout組件同樣是V4包中的組件,也是直接繼承于ViewGroup類,所以這個(gè)類也是一個(gè)容器類。接下來(lái)通過(guò)本文給大家介紹Android組件之DrawerLayout實(shí)現(xiàn)抽屜菜單,感興趣的朋友一起學(xué)習(xí)吧2016-02-02
Android 開機(jī)自啟動(dòng)Service實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Android 開機(jī)自啟動(dòng)Service實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Android中TextView顯示圓圈背景或設(shè)置圓角的方法
TextView顯示文本給用戶,并允許他們選擇編輯。TextView是一個(gè)完整的文本編輯器,但是其基本類配置為不允許編輯。下面這篇文章主要給大家介紹了關(guān)于Android中TextView顯示圓圈背景或設(shè)置圓角的方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-05-05
Android?ANR分析trace文件的產(chǎn)生流程詳情
這篇文章主要介紹了Android?ANR分析trace文件的產(chǎn)生流程詳情,文章圍繞主題展開相詳細(xì)的內(nèi)容介紹,需要的朋友可以參考一下2022-07-07
Android獲取與設(shè)置系統(tǒng)環(huán)境變量的方法指南
這篇文章主要給大家介紹了關(guān)于Android獲取與設(shè)置系統(tǒng)環(huán)境變量的方法指南,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Android實(shí)現(xiàn)底部圖標(biāo)與Fragment的聯(lián)動(dòng)實(shí)例
本篇文章主要介紹了Android實(shí)現(xiàn)底部圖標(biāo)與Fragment的聯(lián)動(dòng)實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下2017-07-07
模仿美團(tuán)點(diǎn)評(píng)的Android應(yīng)用中價(jià)格和購(gòu)買欄懸浮固定的效果
這篇文章主要介紹了模仿美團(tuán)點(diǎn)評(píng)的Android應(yīng)用中價(jià)格和購(gòu)買欄懸浮固定的效果,文章后半還針對(duì)快速滑動(dòng)操作給出了一個(gè)響應(yīng)優(yōu)化的方法,需要的朋友可以參考下2016-04-04

