2011-02-03 43 views
14

Tôi đang tìm kiếm thư viện ImageViewer mở hình ảnh trong ứng dụng của tôi cho URI đã cho (hình ảnh được tải bởi dịch vụ web đã được lưu trữ trong ứng dụng của tôi ở nơi an toàn). Tôi thực sự thích "Samsung Galaxy S" ImageViewer-Activity vì nó sử dụng pinch-zoom và "scrolling" dọc/ngang. Ngoài ra nó quy mô hình ảnh rất nhanh trên điện thoại samsung của tôi :)Lớp ImageViewer của Android hỗ trợ Ghim và Thu phóng

Tôi biết rằng tôi có thể mở một hình ảnh với một ý định như thế này:

Intent i = new Intent(Intent.ACTION_VIEW); 
i.setDataAndType(uri, "image/*"); 
startActivity(i); 

Người xem thích hợp nhất đang được gọi là, khi không được tìm thấy một ActivityNotFoundException được nâng lên. Vì vậy, đó là mát mẻ!

Nhưng vấn đề là tôi không được phép mở hình ảnh với mục đích bên ngoài (vì mục đích bảo mật). tức là: Người dùng không nên có khả năng lưu hình ảnh đã mở thông qua tùy chọn menu vào thẻ sd bên ngoài của mình hoặc gửi ảnh này đến một dịch vụ khác (email/twitter hoặc s.o.). Vì vậy, tôi phải viết ImageViewer-Class (Activity) của riêng mình chỉ có thể được gọi trong ứng dụng của tôi ... Thật không may là tôi không có khả năng chuyển đổi hình ảnh, vì vậy có bất kỳ dự án nguồn mở (hoặc thư viện) nào ?

Tôi đã hỏi google và tìm thấy cái này http://code.google.com/p/android-pinch/ nhưng nó không hoạt động tốt (cũng không có chức năng cuộn).

Cám ơn lời khuyên của bạn :)

+0

Câu hỏi đó cũng là khoảng pinch-to-zoom trong android: http://stackoverflow.com/questions/ 2645648/is-there-a-built-in-api-cho-xử lý-pinch-zoom-chức năng-in-android – cimnine

Trả lời

16

Cách đơn giản nhất để xử lý hình ảnh được sử dụng một WebView, nếu hình ảnh được lưu trữ tại địa phương hoặc một nơi nào trực tuyến. WebView hỗ trợ pinch để phóng to và các chức năng khác.

Ví dụ Java:

String imageUrl = "file:///local/dir/image.jpg"; // http://example.com/image.jpg 
WebView wv = (WebView) findViewById(R.id.yourwebview); 
wv.getSettings().setBuiltInZoomControls(true); 
wv.loadUrl(imageUrl); 

nguồn XML:

<WebView android:id="@+id/yourwebview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
+0

Vâng thats một giải pháp tuyệt vời, cảm ơn! Nó hoạt động theo cách nó nên. Mặc dù tôi phải đặt một tùy chọn 'wv.setInitialScale (100); 'Rất vui khi thấy dễ dàng xem hình ảnh trong android;) Hình ảnh có được lưu trữ trong db nội bộ từ ứng dụng của tôi không? Hay tôi phải gọi 'wv.getSettings(). SetCacheMode (WebSettings.LOAD_NO_CACHE);'? –

+0

Tôi không nghĩ rằng nó được lưu trữ trong bộ nhớ cache hoặc bất cứ điều gì liên quan. – Floern

19

Tại thời điểm này tôi cũng sử dụng WebView. Nhưng đây là khái niệm sai, WebView không phải là để hiển thị hình ảnh, nó để hiển thị nội dung web. WebView là cồng kềnh và cồng kềnh. Bạn đã hạn chế tùy chỉnh nó. Ví dụ, tôi cần mở rộng quy mô, nhưng tôi không muốn thấy điều khiển thu phóng hoặc tôi muốn di chuyển chúng ở vị trí khác, sau đó mặc định.

Vì vậy, tôi đã tìm kiếm về vấn đề này và tìm thấy một số giải pháp:

  • PhotoView widget từ Chris Banes
  • Ngoài ra, bạn có thể nhìn vào hướng dẫn này từ Sony Ericsson (nguồn có sẵn) và có thể thực hiện riêng của bạn phụ tùng: part1, part2, part3
  • Và một số khác thư viện ImageViewZoom tại github

CẬP NHẬT

Chris Banes được tạo ra thư viện tuyệt vời, hỗ trợ cử chỉ cho phóng to hình ảnh, xem điểm đầu tiên ở trên

+0

Có, "ImageViewZoom" hoạt động, nhưng chỉ ở cấp API 8+. – gregn3

+0

ImageViewZoom không hỗ trợ chụm để thu phóng. Khá vô dụng những ngày này khi người dùng muốn véo ngón tay của mình để phóng to một phần của hình ảnh. – AndroidDev

+1

Tiện ích PhotoView từ Chris Banes hoạt động tuyệt vời !! –

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