2009-12-25 15 views
8

Tôi hiện đang triển khai bàn phím phần mềm (sử dụng một số dự đoán phức tạp) và vẽ bằng canvas không đủ về mặt hiệu ứng. Tôi nhận được thời gian vẽ khung cao hơn 100ms, điều này rõ ràng là không thể chấp nhận được.OpenGL trên Android có phải là kẻ giết người pin không?

Bản thân bàn phím bao gồm khoảng 33 phím, mỗi phím được vẽ bằng drawRoundRect và một Văn bản đơn giản phía trên. Không có vật dụng nào được sử dụng, vì vậy nó là sự hoàn hảo đơn giản. Ngoài ra, hầu như tất cả các mẹo về thủ thuật của Google đều được sử dụng, do đó, đó cũng không phải là lý do cho tốc độ.

Tôi hiện đã đạt đến điểm chuyển sang sử dụng opengl thực sự có ý nghĩa, nhưng tôi vẫn hoài nghi khi xem xét tác động của bàn phím dựa trên opengl có thể có trong thời lượng pin.

Vì tôi đã không tìm thấy tài liệu đầy đủ về chủ đề đó, tôi hy vọng ai đó ở đây có thể chỉ cho tôi đúng hướng.

Trả lời

25

Bất kể pin tiêu hao bao nhiêu, có thể bạn không muốn thực hiện điều này vì hầu hết các thiết bị hiện tại không hỗ trợ nhiều ngữ cảnh OpenGL cùng lúc, vì vậy bàn phím mềm của bạn sẽ không tương thích với bất kỳ ứng dụng nào sử dụng OpenGL cho bản vẽ của riêng nó. Trên các thiết bị này, ngữ cảnh OpenGL chỉ được sở hữu bởi ứng dụng nền trước; nó không thể được sử dụng trong các phần thứ cấp của giao diện người dùng như bàn phím mềm.

Cũng như áp phích trước đó cho biết, có thể bạn nên tìm cách tối ưu hóa bản vẽ thông thường của mình. Vẽ vectơ khá chậm, do đó, việc kết xuất trước chúng thành một bitmap để chỉ làm các bitmap bitmap sẽ giúp ích rất nhiều. Cũng hãy cẩn thận để chỉ vẽ các phần của cửa sổ đã thay đổi. 100ms là khoảng thời gian khá mất thời gian để vẽ giao diện người dùng, do đó, hầu như chắc chắn bạn có thể thực hiện tối ưu hóa đáng kể. Bạn có thể muốn xem mã KeyboardView trong nền tảng (được sử dụng bởi bàn phím mềm tiêu chuẩn và IME mẫu); điều này đã chứa nhiều tối ưu hóa bản vẽ tương tự.

+0

Tôi thừa nhận, chắc chắn có một số phương tiện tối ưu hóa còn lại để tôi làm. Tôi sẽ có một cái nhìn tại bitmap blits cho bây giờ và những gì còn lại để nói ngoại trừ: cảm ơn bạn, và giáng sinh vui vẻ (chúng tôi có rất nghiêm túc ở đây trong germany .. :-)) – moritz

+0

Thú vị quan điểm và khía cạnh .. Mỗi ngày một cái gì đó mới để tìm hiểu ở đây ..;) Câu trả lời hay! 10q – Ewoks

+0

Lưu ý: câu trả lời này là từ năm 2009. Các thiết bị hiện đại hỗ trợ nhiều ngữ cảnh GLES và hiển thị với Canvas lên Chế độ xem tùy chỉnh có thể sử dụng GLES để tăng tốc độ (http://developer.android.com/guide/topics/graphics/hardware -accel.html). – fadden

4

An sang một bên: Bạn đã từng xem xét việc hiển thị các phím một lần rồi sau đó lấy chúng làm sprites và blitting chúng? Nó nên được bao la cao hơn để vẽ đồ họa vector.

Tôi không thể cung cấp cho bạn số cứng (và như apphacker được chỉ ra, đây là thiết bị cụ thể), nhưng ngay cả khi OpenGL được tăng tốc phần cứng và do đó có thể sử dụng nhiều pin hơn, hoạt động sẽ hoàn thành nhanh hơn và sử dụng ít điện hơn Tổng cộng. Nếu nó không được tăng tốc phần cứng, có vẻ hợp lý rằng nó chỉ nên sử dụng nhiều điện hơn nếu mất nhiều thời gian hơn để hoàn thành thao tác, vì bạn chỉ trao đổi một API vẽ cho một API khác. Tất cả trong tất cả, như bạn chỉ phải rút ra khi các sự kiện bên ngoài xảy ra nó không nên quan trọng nhiều về lâu dài, như mọi người có lẽ chỉ tip một vài phím mỗi phút.

Có thể bạn sẽ phải thực hiện nó (có thể trong trường hợp kiểm tra đơn giản) và thực hiện các phép đo.

+0

cảm ơn rất nhiều cho câu trả lời của bạn, nhưng xem xét các thông tin hackbod đã cho, có vẻ như nếu opengl không phải là giải pháp (như vui như nó đã có được ..). giáng sinh vui vẻ, btw. – moritz