先上個圖
下面具體講解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...