2010-03-08 29 views
16

tôi sử dụng đoạn mã sau để vẽ một bitmap trong OnDraw của một tùy chỉnh Xemandroid Paint.setShadowLayer() vs Canvas.drawbitmap() vấn đề

Paint p = new Paint(Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG); 
p.setShadowLayer(3,3,3,0xff000000); 
Bitmap bmp = BitmapFactory.decodeResource(some drawable jpg); 
canvas.drawBitmap(bmp,null,new Rect(blah blah),p); 

và bóng trông buồn cười. Ý tôi là gì? Ý tôi là tôi nhận được một cái bóng khác nếu tôi gọi canvas.drawRect(). Có vẻ như sorta giống như mã shadow của android đang xử lý bitmap như một kênh alpha hay cái gì đó.

đã thử thêm p.setColor (0xff000000); và p.setStyle (Paint.Style.FILL); nhưng không khác biệt.

Tôi đoán tôi có thể drawRect với bóng trên, sau đó drawBitmap với bóng tắt, nhưng điều đó có vẻ ngớ ngẩn vì nó sẽ hiển thị pixel hai lần.

+4

trong trường hợp này: hình ảnh cho biết hơn 1000 từ. Vui lòng thêm ảnh chụp màn hình – WarrenFaith

Trả lời

-1

Có thể bạn nên có các đối tượng Sơn khác nhau cho các mục đích khác nhau như văn bản, bitmap, v.v. Vì vậy, cài đặt của một người sẽ không ảnh hưởng đến người khác.

+0

Tôi chỉ thực hiện một thao tác vẽ và do đó chỉ có một đối tượng Sơn. vui lòng đọc lại câu hỏi và mã của tôi. – SteelBytes

2

Về cơ bản, lớp bóng không hoạt động cho bất kỳ nội dung nào ngoại trừ văn bản. Nó thật ngu ngốc. Kiểm tra Android hardware acceleration supported operations chart.

Câu hỏi này được hỏi lại vào năm 2010 khi các khung nhìn tăng tốc phần cứng không tồn tại .. dựa trên những điều tôi đã đọc, thậm chí lớp bóng chỉ hoạt động cho các hình dạng đơn giản (nếu có), kết quả sử dụng nó trên bất cứ thứ gì ngoài văn bản. Bạn có thể không may mắn.

Cuối cùng, có nhiều cách bạn có thể giả mạo một lớp bóng. Bạn có thể bao bọc một chế độ xem ở chế độ xem khác và vẽ bên dưới chế độ xem đó. Bạn có thể viết một cái nhìn mà vẽ bóng mình như một gradient xuyên tâm, vv Nhưng bạn có thể chỉ muốn tạo một 9patch trông giống như một cái bóng và sử dụng nó.

Các vấn đề liên quan