Một cách dễ dàng để đạt được hiệu ứng này là sử dụng Canvas.drawCircle()
và 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);
Để làm cái bóng, chỉ cần gọi Paint.setShadowLayer()
trên sơn (điều này sẽ chỉ làm việc nếu bạn vẽ tác động vào một offscreen Bitmap
hoặc nếu View
của bạn sử dụng lớp phần mềm - được đặt bằng cách gọi View.setLayerType()
-).
Đường viền có thể được vẽ bằng cách vẽ vòng tròn khác lên trên, sử dụng kiểu Paint.Style.STROKE
(bạn có thể đặt bằng cách gọi Paint.setStyle()
).
Cuối cùng, bạn có thể vẽ bóng bằng cách vẽ hình tròn, hình bầu dục hoặc Path
ở đầu vòng kết nối đầu tiên của bạn. Bạn sẽ cần phải sử dụng một bóng đổ LinearGradient
trên sơn của bạn và bạn cũng sẽ cần phải cắt bóng. Bạn có thể làm điều này theo hai cách:
- Nếu bạn đang vẽ toàn bộ hiệu lực thi hành vào một
Bitmap
, đó là những gì tôi muốn giới thiệu, chỉ cần đặt của sơn Xfermode
đến một new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
.
- Nếu bạn đang vẽ hiệu ứng trực tiếp trên màn hình, bạn có thể chỉ cần sử dụng
Canvas.clipPath()
để đặt clip hình tròn. Lưu ý rằng thao tác này sẽ chỉ hoạt động với khả năng tăng tốc phần cứng như Android 4.3.
Nguồn
2013-09-05 17:46:14
Tôi đăng một triển khai góc tròn, hy vọng nó sẽ giúp bạn, http://stackoverflow.com/a/19858771/1294681 – VinceStyling