Łatwym sposobem osiągnięcia tego efektu jest użycie Canvas.drawCircle()
a BitmapShader
:
BitmapShader s = new BitmapShader(myPhoto, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
Paint p = new Paint();
p.setShader(s);
myCanvas.drawCircle(centerX, centerY, radius, p);
Aby zrobić cień, wystarczy zadzwonić Paint.setShadowLayer()
na farbie (to będzie działać tylko wtedy, gdy zwróci wpływ na poza ekranem Bitmap
lub jeśli twoja View
używa warstwy oprogramowania - ustaw przez wywołanie View.setLayerType()
-).
Obramowanie można narysować, rysując na nim inne koło, używając stylu Paint.Style.STROKE
(można go ustawić, wywołując Paint.setStyle()
).
Na koniec możesz narysować połysk, rysując okrąg, owal lub Path
na swoim pierwszym kółku. Będziesz musiał użyć cieniowania LinearGradient
na swojej farbie, a będziesz musiał również przyciąć połysk. Można to zrobić na dwa sposoby:
- Jeśli rysunek całą wpływ na
Bitmap
, czyli co polecam, wystarczy ustawić farby Xfermode
do new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
.
- Jeśli rysujesz efekt bezpośrednio na ekranie, możesz po prostu użyć
Canvas.clipPath()
, aby ustawić okrągły klip. Zauważ, że będzie to działać z akceleracją sprzętową tylko od wersji Androida 4.3.
Publikuję implementację zaokrąglonego rogu, mam nadzieję, że ci to pomoże, http://stackoverflow.com/a/19858771/1294681 – VinceStyling