真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android中怎么對圖片進(jìn)行圓角處理

本篇文章給大家分享的是有關(guān)Android中怎么對圖片進(jìn)行圓角處理,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、東川網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為東川等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

方法一:setXfermode法

此種方式就是再new一個相同尺寸的bitmap,然后使用paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));先畫圓角矩形,再畫原始bitmap,然后就得到了一個圓角的bitmap了。

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {

  Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
  Canvas canvas = new Canvas(output);

  final int color = 0xff424242;
  final Paint paint = new Paint();
  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);
  canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

  paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
  canvas.drawBitmap(bitmap, rect, rect, paint);

  return output;
}

點(diǎn)評:

早期用得較多,占用bitmap雙倍內(nèi)存。

方法二:使用BitmapShader

此種方式是先將bitmap生成BitmapShader,然后將其繪制到canvas中, 部分關(guān)鍵代碼如下,完整代碼請參考QuickAF中的RoundImageView

bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
paint.setShader(bitmapShader);
@Override
public void draw(Canvas canvas) {
  Rect bounds = getBounds();
  canvas.drawRoundRect(fillRect, radius, radius, paint);
  if (mBorderWidth > 0) {
    if (mIsCircle) {
      canvas.drawCircle(bounds.width() / 2, bounds.height() / 2, radius, strokePaint);
    }
    else {
      canvas.drawRoundRect(fillRect, radius, radius, strokePaint);
    }
  }
}

點(diǎn)評:

占用內(nèi)存較大,實現(xiàn)有點(diǎn)小復(fù)雜。

方法三:圖片加載庫

目前github上有許多流行的圖片加載庫,基于上都附帶圓角圖片功能,只需要稍微配置一下,即可輕松的實現(xiàn)想要的效果。其實在底層,無非也是使用上面的兩種方式。比如Android-Universal-Image-Loader 早期的RoundedBitmapDisplayer使用setXfermode來實現(xiàn),后來使用BitmapShader實現(xiàn)。

DisplayImageOptions options = new DisplayImageOptions.Builder()
    .displayer(new RoundedBitmapDisplayer()) // display rounded bitmap
    .build();

再以比較另類的fresco為例,雖然底層是以C實現(xiàn),不過在圓角處理上,仍然還是在Java層實現(xiàn),用的方式還是BitmapShader。不過對于非bitmap的圓角實現(xiàn),fresco是用Paint直接畫的。附上fresco配置。

點(diǎn)評:

由框架實現(xiàn),使用簡單,穩(wěn)定。

方法四:遮罩

此種方式還是使用setXfermode,不過與方法一不同的是:不對圖片作任何更改,只在圓角之外再畫一層與背景顏色相同的四個角來遮擋,在視覺上造成圓角圖片的效果。關(guān)鍵代碼如下:

@Override
protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  if (src != null && dst != null) {
    int w = getMeasuredWidth(), h = getMeasuredHeight();
    int sc = canvas.saveLayer(0, 0, w, h, null,
      Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG
        | Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG);
    canvas.drawBitmap(dst, 0, 0, paint); // 圓角矩形
    paint.setXfermode(mode); // new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT);
    canvas.drawBitmap(src, 0, 0, paint); // 長方形
    paint.setXfermode(null);
    canvas.restoreToCount(sc);
  }
}

詳細(xì)代碼請參考QuickAF中的RoundMaskView

使用這種方式,圓角化的對象不限于ImageView,還可以是任意的layout哦,比如下面的示例



  

    

    
  

  

配合FrameLayout,將LinearLayout實現(xiàn)了圓角,在視覺效果上,ImageView左上和右上圓角,TextView左下和右下圓角。

點(diǎn)評:

具有一定的局限性,不過不限于圖片,所有的Layout都可以在視覺上實現(xiàn)圓角。

以上就是Android中怎么對圖片進(jìn)行圓角處理,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)頁題目:Android中怎么對圖片進(jìn)行圓角處理
文章URL:http://weahome.cn/article/pdhisd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部