Tôi đang chuyển một ứng dụng được viết trong môi trường đồ họa cho phép vẽ xảy ra bên ngoài giới hạn của hình chữ nhật cắt. Bất kỳ cách nào để làm điều này trong Android?Tôi có thể vẽ ra ngoài giới hạn của một Canvas Android
Trả lời
Bạn có thể vẽ nơi bạn thích, nhưng không có gì sẽ được lưu bên ngoài hình chữ nhật cắt.
Để vẽ ra ngoài giới hạn, bạn cần phải mở rộng clipRect của canvas.
Kiểm tra các phương thức clip quá tải Phương pháp quay vòng trên lớp Canvas.
Lưu ý - Bạn sẽ cần chỉ định hoạt động Vùng vì thao tác mặc định là INTERSECT. Vì vậy, một cái gì đó như thế này:
Rect newRect = canvas.getClipBounds();
newRect.inset(-5, -5) //make the rect larger
canvas.clipRect (newRect, Region.Op.REPLACE);
//happily draw outside the bound now
Nó không hoạt động chút nào. Tôi chỉ thay đổi kích cỡ canvas với tham số (-2000, -2000), sau đó dịch nó nhưng hình ảnh tôi vẽ vẫn bị cắt bớt. – tomrozb
đã làm việc cho tôi. +1 – dac2009
nhưng nếu bạn làm điều đó trên mọi 'onDraw (Canvas canvas)' thì bạn không làm cho máy tính làm được nhiều việc hơn? –
cố gắng để thiết lập
android:clipChildren="false"
đến xem mẹ
Tôi không biết về câu hỏi nhưng tôi muốn cảm ơn bạn đã giải quyết, vấn đề của tôi, mà tôi đang phải đối mặt. Cảm ơn bạn. Đây là những gì tôi đang tìm kiếm. – tannerjohn
Vui lòng xem http://stackoverflow.com/questions/32735119/draw-outside-the-bounds-of-an-android-canvas –
@MortezaRastgoo câu hỏi được liên kết (và câu trả lời) không trực tiếp dịch sang vấn đề này ở tất cả. –
Câu trả lời @numan đã gần như ok, vấn đề là phân bổ bộ nhớ với cách tiếp cận đó, vì vậy chúng tôi nên làm điều này, thay vào đó:
// in constructor/elsewhere
Rect newRect = new Rect();
// in onDraw
canvas.getClipBounds(newRect);
newRect.inset(0, -20); //make the rect larger
canvas.clipRect(newRect, Region.Op.REPLACE);
Điều đó giải quyết được vấn đề :-)
Làm cách nào để bắt đầu 'newRect'? –
Ok, tôi đoán điểm ở đây là newRect được cấp phát một lần cho mỗi đối tượng init, thay vì phân bổ nó mỗi khi onDraw được gọi. –
Tôi đã thử điều đó, nhưng nó không hoạt động. –
Nếu bạn muốn vẽ văn bản nằm ngoài giới hạn trong TextView, bạn nên làm điều này thay vì:
<TextView
...
android:shadowColor="#01000000"
android:shadowDx="100" // out of right bound
android:shadowDy="0"
android:shadowRadius="1"
.../>
Nó không làm việc để sử dụng clipRect() như câu trả lời @ Numan vì TextView clip nó là rect riêng trong onDraw():
if (mShadowRadius != 0) {
clipLeft += Math.min(0, mShadowDx - mShadowRadius);
clipRight += Math.max(0, mShadowDx + mShadowRadius);
clipTop += Math.min(0, mShadowDy - mShadowRadius);
clipBottom += Math.max(0, mShadowDy + mShadowRadius);
}
canvas.clipRect(clipLeft, clipTop, clipRight, clipBottom);
cuối cùng nhưng không kém, Đừng quên để thiết lập android:clipChildren="false"
và android:clipToPadding="false"
trong cha mẹ của bạn ViewGroup
- 1. Trên iOS, drawRect không thể vẽ ra ngoài giới hạn của khung nhìn?
- 2. Hiệu quả về bản vẽ canvas android
- 3. Ngăn chặn vẽ ngoài canvas với SurfaceView
- 4. Vẽ hình nền của NSTableView bên ngoài giới hạn của nó
- 5. Bản vẽ canvas SurfaceView của Android với một chủ đề
- 6. Vẽ văn bản bằng nét ngoài với canvas của HTML5
- 7. Hình nền vẽ canvas Android
- 8. Vẽ bitmap mờ bằng Canvas (Android)
- 9. C# string split - index ngoài giới hạn
- 10. HTML5 Canvas: Cách biết giới hạn cho kích thước?
- 11. Vẽ Chín Bản vá lên Canvas (Android)
- 12. Tôi có thể giới hạn độ dài của một mảng trong JavaScript không?
- 13. Tôi có thể giới hạn kích thước của một mảng trong Scala không?
- 14. NSArray ngoài giới hạn kiểm tra
- 15. FPS giới hạn của tôi: 60
- 16. HTML5 Canvas Vẽ Rect - Có biên giới của chiều rộng Diff?
- 17. Chỉ mục ArrayList ngoài giới hạn
- 18. Hình nền có thể mở rộng ra ngoài biên giới của div không?
- 19. Giới hạn kích thước APK của Android trong Google Play
- 20. Lấy các giới hạn của một MKMapView
- 21. Giới hạn kích thước heap của Android, chúng tôi có thực sự cần thiết kế các ứng dụng có giới hạn 16 MB không?
- 22. Tôi có thể giới hạn I/O của ứng dụng C#
- 23. Giới hạn đầu ra của `adb shell dumpsys alarm`
- 24. Giới hạn đầu ra của tất cả các lệnh Linux
- 25. Nhận hộp giới hạn của thành phố
- 26. Chúng tôi có thể giới hạn số lượng ký tự trong edittext của SearchView trong Android không?
- 27. Fullcalendar - giới hạn có thể chọn cho một ngày
- 28. Không thể đặt giới hạn với coord_trans
- 29. Hộp giới hạn 2D của một ngành?
- 30. Tôi có thể giới hạn số ký tự của TextView không?
Chúng tôi không có ý tưởng những gì bạn đang nói về một ví dụ và một số Mã số – Falmarri