自定義view之圓形頭像(2種實現方式)

2021-07-07 04:10:25 字數 1868 閱讀 4165

先上個圖

下面具體講解2種方式

一、porterduffxfermode

這個在上篇文章中有具體講到,還用這個實現了乙個刮刮卡,其實想想,用這個也能實現。

先畫乙個圓,接著把圖蓋上去,用porterduff.mode.src_in合併,ok。

mbitmap = bitmapfactory.decoderesource(getresources(),

r.mipmap

.beauty);

mout = bitmap.createbitmap(mbitmap.getwidth(),

mbitmap.getheight(), bitmap.config

.argb_8888);

canvas canvas = new canvas(mout);

mpaint = new paint();

mpaint.setantialias(true);

canvas.drawcircle(300, 150,

100,

mpaint);

mpaint.setxfermode(new porterduffxfermode(

porterduff.mode

.src_in));

canvas.drawbitmap(mbitmap, 0, 0, mpaint);

二、shader渲染器shader又被稱為著色器、渲染器,主要用來實現一些列的漸變、渲染效果。android中的shader包括以下幾種:

bitmapshader——位圖

lineargradient——線性

radialgrdient——光束

sweepgradient——梯度

composeshader——混合

除了第乙個shader意外,其他的shader都比較正常。而與其他的shader所產生的漸變不同,bitmapshader產生的是乙個影象,這個有點像photoshop中的影象填充漸變。他的作用就是通過paint對畫布進行指定的bitmap的填充,填充有以下幾個模式可以選擇。

clamp重複最後乙個顏色至最後

mirror重複著色的影象水平或垂直方向已映象方式填充會有翻轉效果

repeat重複著色的影象水平或垂直方向

簡單介紹完之後,我們直接看是如何實現的:

mbitmap = bitmapfactory.decoderesource(getresources(),

r.mipmap

.beauty);

mbitmapshader = new bitmapshader(mbitmap,

shader.tilemode

.repeat, shader.tilemode

.repeat);

mpaint = new paint();

mpaint.setshader(mbitmapshader);

canvas.drawcircle(300, 150, 100, mpaint);

以上**中,用一張建立了一支具有影象填充功能的畫筆,並使用這個畫筆繪製了乙個圓形。這樣,我們就看見了乙個圓形的圖形。

簡簡單單的幾行**,就實現了圓形頭像,之前記得有個圓形頭像的實現,github上面比較流行的一套**

大家可以看一下circleimageview的原始碼會發現,原理用的就是這個bitmapshader。

對於circleimageview,具體可以參考牛人們寫的一篇文章

Android自定義View之圓形頭像

圓形頭像是我們在開發中經常用到的控制項,下面我們就來自定義這樣乙個控制項 1.自定義circleimageview類繼承imageview package com.example.qw.circleimageview created by quwei on 2015 5 13 0013.import...

Android圓形頭像顯示自定義View

在專案開發中,需要給使用者的頭像設定為圓形。無論獲取到什麼,都顯示為圓形頭像。自定義view寫法如下。使用的時候在xml布局中,直接使用就好。public class mycircleimageview extends imageview public mycircleimageview conte...

實訓 自定義View

1.自定義view分為自繪控制項和重寫控制項 2.自繪控制項 建立乙個類繼承view,通過重寫ondraw方法,使用canvas,paint等工具完成繪製,然後在activity的布局中引用建立乙個子執行緒,每隔1s重新整理new thread new runnable catch interrup...