6

Hãy tưởng tượng rằng tôi có hình ảnh hình chữ nhật. Làm thế nào tôi có thể tạo ra một phong cách như thế tiếp theo?Làm thế nào để tạo một vòng tròn clippath từ một hình ảnh?

enter image description here enter image description here

Ý tôi là, cắt xén hình ảnh thành một vòng tròn, thêm đường viền, bóng và tổng hiệu lực/tỏa sáng. Cho đến bây giờ, tôi chỉ thử đoạn mã này để cắt hình ảnh: Cropping circular area from bitmap in Android nhưng chỉ vậy thôi. Tôi không có ý tưởng làm thế nào để làm các thành phần còn lại trong Android.

+0

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

Trả lời

16

Một cách dễ dàng để đạt được hiệu ứng này là sử dụng Canvas.drawCircle()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:

  1. 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).
  2. 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.