Tôi sử dụng CrossWalk để hiển thị trang web, nó hoạt động tốt. Tôi có một tính năng để nắm bắt toàn bộ nội dung dưới dạng bitmap để lưu vào SDCard, nhưng tôi không thể tìm thấy giải pháp. Sử dụng TextureView chỉ có thể chụp một bitmap có kích thước màn hình, bất kỳ ai cũng có cùng một vấn đề? BTW, tôi có thể nắm bắt toàn bộ nội dung bằng cách sử dụng WebView.draw().Làm thế nào tôi có thể chụp toàn bộ khung nhìn vào một Bitmap khi sử dụng lối qua đường để hiển thị trang web?
Trả lời
Dưới đây là một số mã giả có thể hữu ích. Bạn có thể nhận được chiều cao và chiều rộng nội dung từ webview và sau đó bạn có thể tận dụng webview.draw() ... vì vậy một cái gì đó như sau.
Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(), webView.getContentHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
webView.draw(canvas);
Sau đó, bạn có thể xuất tập tin bitmap của bạn sử dụng bitmap.compress và đầu ra nó vào một dòng đầu ra tập tin
//fos is a FileOutputStream, you can use something else if needed. bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
Vấn đề duy nhất mà tôi thấy trước với điều này là bitmap của bạn có thể cắt nội dung theo chiều ngang vì WebView không có phương thức để có chiều rộng nội dung. Nếu không, tôi nghĩ rằng điều này sẽ làm việc.
Tôi chưa bao giờ sử dụng lối đi qua đường trước đây, nhưng tôi đoán rằng WebView lối đi cũng là hậu duệ của android.view.View. Nếu có, thì bạn có thể sử dụng bộ nhớ cache bản vẽ chế độ xem android. Nó trông như thế này
yourWebView.setDrawingCacheEnabled(true);
Bitmap bmp = yourWebView.getDrawingCache();
Sau đó, như Paul nói, lưu nó qua FileOutputStream
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
getDrawingCache() chỉ có thể nhận được một phần của WebView chứ không phải toàn bộ nội dung trang. – handrenliang
Bạn không thể chụp XWalkView hình ảnh bằng cách tiêu chuẩn như mô tả trong câu trả lời ở trên vì crosswalk XWalkView làm việc với lớp phần cứng (tức là SurfaceView hoặc TextureView). Nhưng bạn có thể sử dụng phương thức getBitmap() của lớp TextureView để lấy nó.
Nói tóm lại, bạn nên cho phép sử dụng của TextureView trong crosswalk trước XWalkView sẽ được khởi tạo (trong ứng dụng lớp con chẳng hạn) với:
XWalkPreferences.setValue(XWalkPreferences.ANIMATABLE_XWALK_VIEW, true);
Và tìm TextureView trong cây xem để gọi getBitmap() trên đó.
Something như thế:
/**
* Returns TextureView which is used in XWalkView
*
* @param group
* @return
*/
private TextureView findXWalkTextureView(ViewGroup group) {
int childCount = group.getChildCount();
for (int i = 0; i < childCount; i++) {
View child = group.getChildAt(i);
if (child instanceof TextureView) {
String parentClassName = child.getParent().getClass().toString();
boolean isRightKindOfParent = (parentClassName.contains("XWalk"));
if (isRightKindOfParent) {
return (TextureView) child;
}
} else if (child instanceof ViewGroup) {
TextureView textureView = findXWalkTextureView((ViewGroup) child);
if (textureView != null) {
return textureView;
}
}
}
return null;
}
/**
* Example of capturing image from XWalkView based on TextureView
*
* @return
*/
public Bitmap captureImage() {
if (mXWalkView != null) {
Bitmap bitmap = null;
boolean isCrosswalk = false;
try {
Class.forName("org.xwalk.core.XWalkView");
isCrosswalk = true;
} catch (Exception e) {
e.printStackTrace();
}
if (isCrosswalk) {
try {
TextureView textureView = findXWalkTextureView(mXWalkView);
bitmap = textureView.getBitmap();
} catch (Exception e) {
e.printStackTrace();
}
} else {
bitmap = Bitmap.createBitmap(mXWalkView.getWidth(), mXWalkView.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bitmap);
mXWalkView.draw(c);
}
return bitmap;
} else {
return null;
}
}
Kiểm tra mã này: https://github.com/gitawego/cordova-screenshot/blob/master/src/android/Screenshot.java để biết thêm chi tiết.
Tôi muốn chụp toàn bộ khung nhìn không phải là một phần màn hình của nó. – handrenliang
- 1. Cách chụp màn hình toàn bộ trang web, thay vì hiển thị trên màn hình
- 2. Tôi có thể chụp màn hình một trang web bằng cách sử dụng R như thế nào?
- 3. Làm thế nào để hiển thị khung nhìn Backbone bên trong một thành phần React?
- 4. Làm thế nào để kiểm soát hiển thị có điều kiện các khung nhìn một phần trong ASP.NET MVC
- 5. Làm thế nào để hiển thị khung nhìn UIActionSheet từ phía trên Tab Bar Controller?
- 6. Làm cách nào để hiển thị hộp thoại jquery trước khi toàn bộ trang được tải?
- 7. Sử dụng QTWebKit để hiển thị một trang web được lưu trữ trong bộ nhớ
- 8. Làm thế nào để hiển thị toàn bộ QString trong khi gỡ lỗi
- 9. Làm thế nào để hiển thị một email HTML trong một ứng dụng web?
- 10. BeautifulSoup Grab Văn bản trang web có thể nhìn thấy
- 11. Làm thế nào để chụp một ảnh chụp màn hình trang web đầy đủ với C# và WebKit.NET?
- 12. Trong Rails, làm thế nào để bạn render JSON bằng cách sử dụng một khung nhìn?
- 13. Làm thế nào để lưu trữ một CBPeripheral để sử dụng trong các khung nhìn khác
- 14. Làm thế nào để tạo một hộp điền vào toàn bộ trang web trong tất cả các trình duyệt?
- 15. Làm thế nào để thực hiện tìm kiếm google hiển thị trang web của tôi như
- 16. Làm thế nào để vượt qua một mô hình có chứa một mô hình IEnumerable (phức tạp) vào một bộ điều khiển từ một khung nhìn C# MVC3?
- 17. Làm thế nào tôi có thể hiển thị một thanh tabbar khi đẩy một UIViewController vào Navigation chồng
- 18. Làm cách nào để tải trước trang web trước khi hiển thị?
- 19. Tôi có thể sử dụng MiniProfiler để trang bị một trang web ASP.NET MVC WebApi không?
- 20. Làm cách nào để áp dụng Google Closure cho toàn bộ trang web của tôi?
- 21. Tôi có thể sử dụng WriteableBitmap của Silverlight để lưu các phần không hiển thị của giao diện người dùng của tôi vào một bitmap không?
- 22. Làm thế nào tôi có thể sử dụng fprintf và ghi vào một đường ống?
- 23. Làm thế nào tôi có thể thay đổi cách chủ đề Drupal hiển thị trang chủ
- 24. Làm thế nào tôi có thể lập trình tạo ảnh chụp màn hình của một trang Web cụ thể?
- 25. Làm thế nào để hạn chế đầu vào người dùng có thể nhìn thấy khi sử dụng std :: cin?
- 26. Làm thế nào tôi có thể viết một trang tải với khung chơi
- 27. Làm cách nào để thay đổi CSS của toàn bộ trang/trang web khi nhấp?
- 28. WTForms của Python Flask: Làm thế nào tôi có thể vô hiệu hóa một trường động trong một khung nhìn?
- 29. Làm thế nào để bạn thực hiện Zend Framework KHÔNG hiển thị một khung nhìn/bố cục khi gửi một phản hồi AJAX?
- 30. Làm thế nào để sử dụng redux trong trang web nhiều trang?
Tôi sử dụng phương pháp này để chụp nội dung WebView, nhưng nó không hoạt động trên WebView CrossWalk. – handrenliang
Tôi không quen với việc đi bộ chéo nhưng nhìn vào sự hiểu biết của họ rõ ràng điều này sẽ không hiệu quả. Thành thật xin lỗi về điều đó. XWalkView là một lớp con của FrameLayout, không phải là dạng xem web. Có bất cứ điều gì ngăn cản bạn tải html của bạn vào một webview và lưu nó từ đó? –
Như bạn đã biết, WebView dưới 4.4 sử dụng Webkit để hiển thị trang, nó hút. Tôi tạo một trình soạn thảo siêu văn bản không hoạt động tốt dưới 4.4. – handrenliang