2012-11-03 33 views
24

Tôi có đoạn mã sau, đoạn mã này biến đổi một tập hợp các giới hạn sử dụng ma trận chuyển đổi hiện tại của canvas.Phương án thay thế cho Canvas.getMatrix không được chấp nhận() là gì?

final RectF bounds = renderer.computeBounds 
    activeCanvas.getMatrix().mapRect(result, bounds); 
    return bounds; 

Tuy nhiên, với mức API mới nhất (16) tôi nhận được một cảnh báo

The method getMatrix() from the type Canvas is deprecated

như xác nhận bởi API 16 Diff Specification.

Điều này là tốt và tất cả, nhưng tài liệu hiện tại trên Canvas.getMatrix() không đề cập đến việc không dùng nữa, cũng như không cung cấp thay thế. Như một cách giải quyết, bây giờ tôi chỉ đơn giản là ngăn chặn cảnh báo này, nhưng tôi thực sự muốn biết những gì mới và cải tiến (tm) cách làm điều này trông giống như.

+0

sử dụng canvas.concat (ma trận) –

Trả lời

9

Ma trận hiện được xử lý bởi chế độ xem thay vì Canvas. Rất tiếc, tôi không thể giải thích cho bạn quyết định của Google về vấn đề này, nhưng bạn sẽ có thể tạo lại chính xác những điều tương tự với 2 cách.

+0

Điều này có vẻ đúng, mặc dù 'getMatrix',' getRotation' ... được giới thiệu trong api 11. Dù sao, TransformationInfo được giới thiệu trong dạng xem để giữ thông tin này. Tại sao? Tôi không biết, nhưng tôi nghi ngờ nó phải làm với các hình ảnh động mới api –

+0

Tôi nghĩ rằng lý do chính tại sao là làm việc với một Canvas mang lại phức tạp hơn làm việc trực tiếp với View. Logic của giao dịch với View làm cho mã thống nhất hơn tôi muốn nói, và nó có thể là logic mà họ cố gắng đạt được. – ben

+0

Nhưng một khung vẽ vẫn rất hữu ích khi vẽ/tạo bitmap. –

3

Nếu bạn không có quyền truy cập vào một cái nhìn:

Để làm việc xung quanh vấn đề này, trong hầu hết các trường hợp, bạn có thể áp dụng bất kỳ biến đổi sử dụng canvas.scale(), canvas.translate(), vv thay vì lấy ma trận, sửa đổi nó và sau đó thiết lập lại ma trận.

Từ Google issue with getMatrix when hardwareAcceleration is enabled, như được tham chiếu bởi Sandeep.

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