鍍金池/ 教程/ Android/ 圓角和圓圈
進(jìn)度條
在JAVA代碼中使用Drawees
Drawee的各種效果配置
緩存
一些陷阱
關(guān)于在Android Studio中編譯
多圖請(qǐng)求及圖片復(fù)用
自定義網(wǎng)絡(luò)加載
支持的URIs
可關(guān)閉的引用
監(jiān)聽下載事件
修改圖片
引入Fresco
縮放
圓角和圓圈
配置Image Pipeline
縮放和旋轉(zhuǎn)圖片
(圖片請(qǐng)求)Image Requests
自定義View
使用ControllerBuilder
在XML中使用Drawees
開始使用 Fresco
關(guān)鍵概念
Image Pipeline介紹
漸進(jìn)式JPEG圖
數(shù)據(jù)源和數(shù)據(jù)訂閱者
直接使用Image Pipeline
動(dòng)畫圖(gif)
使用其他的Image Loader

圓角和圓圈

本教程內(nèi)容來源于:http://fresco-cn.org
采用 知識(shí)共享 署名 4.0 國際 許可協(xié)議 進(jìn)行許可

Drawee 輕松支持圓角顯示,并且顯示圓角時(shí),并不復(fù)制和修改Bitmap對(duì)象,那樣太耗費(fèi)內(nèi)存。

圓角

圓角實(shí)際有2中呈現(xiàn)方式:

  1. 圓圈 - 設(shè)置roundAsCircle為true
  2. 圓角 - 設(shè)置roundedCornerRadius

設(shè)置圓角時(shí),支持4個(gè)角不同的半徑。XML中無法配置,但可在Java代碼中配置。

設(shè)置圓角

可使用以下兩種方式:

  1. 默認(rèn)使用一個(gè)shader繪制圓角,但是僅僅占位圖所要顯示的圖有圓角效果。失敗示意圖和重下載示意圖無圓角效果。
  2. 疊加一個(gè)solid color來繪制圓角。但是背景需要固定成指定的顏色。 在XML中指定 roundWithOverlayColor, 或者通過調(diào)用setOverlayColor來完成此設(shè)定。

XML中配置

SimpleDraweeView 支持如下幾種圓角配置:

xml
<com.facebook.drawee.view.SimpleDraweeView
   ...
   fresco:roundedCornerRadius="5dp"
   fresco:roundBottomLeft="false"
   fresco:roundBottomRight="false"
   fresco:roundWithOverlayColor="@color/blue"
   fresco:roundingBorderWidth="1dp"
   fresco:roundingBorderColor="@color/red"

代碼中配置

在創(chuàng)建 DraweeHierarchy 時(shí),可以給GenericDraweeHierarchyBuilder指定一個(gè)RoundingParams 用來繪制圓角效果。

RoundingParams roundingParams = RoundingParams.fromCornersRadius(7f);
roundingParams.setOverlayColor(R.color.green);
// 或用 fromCornersRadii 以及 asCircle 方法
genericDraweeHierarchyBuilder
    .setRoundingParams(roundingParams);

你也可以在運(yùn)行時(shí),改變圓角效果

RoundingParams roundingParams = 
    mSimpleDraweeView.getHierarchy().getRoundingParams();
roundingParams.setBorder(R.color.red, 1.0);
roundingParams.setRoundAsCircle(true);
mSimpleDraweeView.getHierarchy().setRoundingParams(roundingParams);

在運(yùn)行時(shí),不能改變呈現(xiàn)方式: 原本是圓角,不能改為圓圈。

說明

當(dāng)使用BITMAP_ONLY(默認(rèn))模式時(shí)的限制:

  • 并非所有的圖片分支部分都可以實(shí)現(xiàn)圓角,目前只有占位圖片和實(shí)際圖片可以實(shí)現(xiàn)圓角,我們正在努力為背景圖片實(shí)現(xiàn)圓角功能。
  • 只有BitmapDrawable 和 ColorDrawable類的圖片可以實(shí)現(xiàn)圓角。我們目前不支持包括NinePatchDrawable和 ShapeDrawable在內(nèi)的其他類型圖片。(無論他們是在XML或是程序中聲明的)
  • 動(dòng)畫不能被圓角。
  • 由于Android的BitmapShader的限制,當(dāng)一個(gè)圖片不能覆蓋全部的View的時(shí)候,邊緣部分會(huì)被重復(fù)顯示,而非留白。對(duì)這種情況可以使用不同的縮放類型(比如centerCrop)來保證圖片覆蓋了全部的View。 OVERLAY_COLOR模式?jīng)]有上述限制,但由于這個(gè)模式使用在圖片上覆蓋一個(gè)純色圖層的方式來模擬圓角效果,因此只有在圖標(biāo)背景是靜止的并且與圖層同色的情況下才能獲得較好的效果。

Drawee 內(nèi)部實(shí)現(xiàn)了一個(gè)CLIPPING模式。但由于有些Canvas的實(shí)現(xiàn)并不支持路徑剪裁(Path Clipping),這個(gè)模式被禁用了且不對(duì)外開放。并且由于路徑剪裁不支持反鋸齒,會(huì)導(dǎo)致圓角的邊緣呈現(xiàn)像素化的效果。

總之,如果生成臨時(shí)bitmap的方法,所有的上述問題都可以避免。但是這個(gè)方法并不被支持因?yàn)檫@會(huì)導(dǎo)致很嚴(yán)重的內(nèi)存問題。