2016-10-20 29 views
6

Mục tiêu:Bàn Vẽ/Painting/tiết kiệm nhiều bitmap

Tôi muốn vẽ/ghi/sơn trên bitmap từ pdf và lưu chúng lại với nhau để tôi có thể gửi e-mail.

chi tiết:

Tôi có nhiều Pdf file chứa mỗi 5-20 trang, ngay bây giờ là giải nén bitmap từ pdfs và tải chúng trong mảnh vỡ trong ViewPager, nơi tôi có thể vuốt qua họ và viết/vẽ hoặc bất cứ điều gì Tôi muốn. Để lưu/khôi phục trạng thái hiện tại của bitmap, tôi đang sử dụng onSaveInstanceState. Bằng cách này tôi có thể truy xuất giai đoạn cuối của bitmap trong khi vuốt qua lại.

Something như thế này:

@Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putParcelable("Bitmap", bitmap); 
    } 

Vấn đề:

ép tài khoản gửi nút email trong và tôi sẽ có thể lưu tất cả những hình ảnh bất kể là trang anh là trên tức là ông đã thay đổi nội dung trang 5 đến 10 và bây giờ anh ấy đang ở trang 10 và nhấn nút gửi Tôi sẽ có thể truy xuất tất cả các hình ảnh đã chỉnh sửa.

Vấn đề 2:

Như tôi đã nói số lượng hình ảnh khoảng 5-20, Tiết kiệm nhà nước trong onSaveInstanceState hoạt động tuyệt vời nhưng nó vẫn không ngừng gia tăng bộ nhớ ứng dụng trong ram, và treo ứng dụng tại 10 hình ảnh có kích thước ứng dụng đến 150Mbs.

Tuy nhiên, việc lưu hình ảnh dưới dạng gói trong onSaveInstanceState cũng cần thiết vì nó giúp tải hình ảnh nhanh hơn khi người dùng vuốt ngược lại.

Vì vậy, tôi đã suy nghĩ là có cách nào chúng ta có thể tạo ra một bó tùy chỉnh lớp học, nơi chúng ta có thể ghi ảnh vào đĩa sau khi nói 5 trang cuộn và xóa bộ nhớ và đọc nó trở lại từ đĩa vào bộ nhớ khi sử dụng đang cuộn lại? âm thanh này có hợp lý không?

Những gì tôi đã cố gắng:

Như bitmap được nạp trong mảnh riêng biệt tôi đã cố gắng để lưu các bitmap để lưu trữ bên ngoài trong OnDestroy, nhưng như tiết kiệm bitmap vào đĩa không phải là một nhiệm vụ nhỏ, phải mất thời gian mặc dù đang sử dụng AsyncTask nhưng khi người dùng đang vuốt nhanh bit giữa các đoạn thì lưu bitmap trong OnDestroy dường như không phải là cách thuận tiện.

Đây là lý do tại sao tôi hỏi câu hỏi để có thể bạn hiểu rõ hơn về tình hình và có thể giúp tôi đạt được điều này một cách thuận tiện hơn.

Vì vậy, bạn định làm cách nào để xử lý tình huống này?

Lưu ý:

nếu bạn gặp khó khăn khi tìm hiểu tình hình và cần thêm thông tin để lại cho tôi một lời nhận xét và tôi sẽ cập nhật các câu hỏi.

Cảm ơn

+0

Tôi có các câu hỏi sau đây cho bạn. 1. là bạn thu nhỏ hình ảnh và hiển thị để xempager theo chiều rộng bố trí/chiều cao. nếu bạn không phải làm điều đó (điều này sẽ làm giảm mức tiêu thụ bộ nhớ bitmap). – HourGlass

+0

2. Giả sử bạn có canvas trên mỗi hình ảnh, người dùng vẽ một thứ gì đó lên đó, r u lưu các thay đổi cho hình ảnh khi người dùng vuốt sang hình ảnh tiếp theo. (Thực hành này sẽ tăng kích thước hình ảnh). – HourGlass

Trả lời

0

Hãy để tôi mô tả cách tôi đang nhìn thấy các giải pháp của vấn đề này ngay bây giờ.

Nên có một Service mà phải mất một sửa bitmap với một số id (tương tự cho tất cả các thay đổi của bitmap gốc), thêm nó phải xếp hàng và sau đó từng hạng mục của hàng đợi rằng nó vẫn tồn tại vào bộ nhớ ngoài. Nó có trường hợp giới hạn Executor thực hiện các tác vụ đó (chúng có thể chỉ là Runnable) và Service tạo ra một HashMap nơi bản đồ Future của tác vụ đối với định danh bitmap. Vì vậy, khi mới Bitmap đã đến, Service kiểm tra bản đồ và thay thế nhiệm vụ chờ đợi (với cùng một bitmap ban đầu) nếu có tồn tại.

Bạn có thể gửi công việc tới số Service này từ destroyItem thiết bị chặn của FragmentStatePagerAdapter.

Vì vậy, khi người dùng nhấp vào nút lưu, bạn cũng nên gửi tất cả các bitmap đã chỉnh sửa sang trái tới số Service và chờ hoàn thành.

+0

Tôi cũng nghĩ như vậy, bạn nghĩ gì về [Tap] (http://square.github.io/tape/)? – Max

+0

@MaxRockwood trông rất đẹp, giống như một vỏ bọc phẳng xung quanh một dịch vụ Android, hình vuông hầu như luôn tạo ra một ý tưởng tốt. Nhưng tôi đã không sử dụng nó trước khi – Beloo

+0

yeah hệ thống hàng đợi có vẻ đầy hứa hẹn về tình hình tôi có, tôi sẽ cung cấp cho nó một shot và đăng cập nhật. – Max

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