Web sayfasını görüntülemek için CrossWalk kullanıyorum, iyi çalışıyor. Tüm içeriği SDCard'a kaydetmek için bitmap olarak yakalama özelliğim var, ancak bir çözüm bulamıyorum. TextureView kullanarak sadece bir ekran boyutu bitmap yakalayabilir, herkes aynı sorunu yaşıyor mu? BTW, tüm içeriği WebView.draw() kullanarak yakalayabilirim.Web sayfasını görüntülemek için yaya geçidi kullanırken tüm görünümü Bitmap'e nasıl kaydedebilirim?
Web sayfasını görüntülemek için yaya geçidi kullanırken tüm görünümü Bitmap'e nasıl kaydedebilirim?
cevap
İşte yardımcı olabilecek bazı sözde kodlar. İçerik yüksekliğini ve genişliğini web görünümünden alabilir ve ardından webview.draw() 'dan yararlanarak aşağıdaki gibi bir şey yapabilirsiniz.
Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(), webView.getContentHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
webView.draw(canvas);
Sonra çıktı bir dosya çıkış akışı bitmap.compress ve çıkışını kullanmadan eşlem dosyası can
//fos is a FileOutputStream, you can use something else if needed. bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
Bununla tahmin tek sorun eşlem içeriği kesme olabilmesidir WebView, içerik genişliğini elde etmek için bir yönteme sahip olmadığı için yatay olarak. Aksi halde bunun işe yarayacağını düşünüyorum.
Daha önce hiç yaya geçidi kullanmıyorum, ama Crosswalk WebView'in de android.view.View öğesinden türeyen olduğunu tahmin ediyorum. Eğer öyleyse, o zaman android görünümü çizim önbelleğini kullanabilirsiniz. Bu Paul söylediği gibi Sonra bu
yourWebView.setDrawingCacheEnabled(true);
Bitmap bmp = yourWebView.getDrawingCache();
benziyor Yaya Geçidi XWalkView donanım katmanıyla çalıştığı için yukarıdaki cevapları açıklandığı gibi (FileOutputStream
aracılığıylabitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
öğesini kaydırmak zorundadır. GetDrawingCache(), tüm sayfa içeriğinin değil WebView'un yalnızca bir bölümünü alabilir. – handrenliang
Standart yollarla tarafından XWalkView görüntüsünü yakalamak olamaz kaydedin yani SurfaceView veya TextureView). Ancak bunu almak için TextureView sınıfının getBitmap() yöntemini kullanabilirsiniz. ile Kısacası
, sen XWalkView (örneğin uygulama alt sınıfta) başlatılır önce Yaya geçidinde TextureView kullanımı sağlamalıdır:
XWalkPreferences.setValue(XWalkPreferences.ANIMATABLE_XWALK_VIEW, true);
Ve Gösterim ağacında TextureView bulmak üzerinde getBitmap() aramak için. Böyle
şey:
/**
* 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;
}
}
Kontrol bu kodu: Daha fazla ayrıntı için https://github.com/gitawego/cordova-screenshot/blob/master/src/android/Screenshot.java.
Tüm ekran görüntüsünü ekranın bir parçası olarak görmek istiyorum. – handrenliang
- 1. İyonik uygulamada Web görünümü
- 2. cordova çöker cordova-eklenti-yaya geçidi-web görüntülemesini
- 3. Bir Android Web Görünümü ile görüntülemek için bir web sayfasını önbelleğe almanın bir yolu var mı?
- 4. Tüm Web Sayfasını iOS
- 5. Bir web sayfasını aşağı kaydırmak için nasıl
- 6. Dinamik web sayfasını ayrıştırma
- 7. Web Görünümü, tüm iletişim penceresini Android'de tutuyor
- 8. Android 4.4 ve üstü için yaya geçidi kullanarak herhangi bir gerçek fayda var mı?
- 9. Bir web sayfasını php olarak indirmek için:
- 10. Web sayfasını resmine getirin
- 11. Tüm HTTP isteğini WAI/scotty'de nasıl kaydedebilirim?
- 12. Raylar: Web sayfasını scafold kullanmadan nasıl görüntüleyebilirim?
- 13. StructureMap: Tüm arabirimleri için aynı örneği nasıl kaydedebilirim?
- 14. Bir web sayfası anlık görüntüsünü tüm öğeleriyle (css, js, resimler, ...) bir dosyaya nasıl kaydedebilirim?
- 15. app web sayfasını açmak için düğmeye basın
- 16. İletişim Kutusunda Web Görünümü
- 17. "Yalnızca güvenli bir şekilde teslim edilen web sayfasını görüntülemek ister misiniz?" Uyarısı nasıl devre dışı bırakılır?
- 18. Tüm çalışma sayfasını Apache POI
- 19. Bir web sayfasını CSS ile nasıl bölersiniz?
- 20. Proje web sayfasını SourceForge'da nasıl değiştirebilirim?
- 21. UIWebView içinde bir web sayfasını kaydırma
- 22. Python 3 Web ağ geçidi arabirimleri
- 23. JavaScript bazen bazı javascript fonksiyonları içeren bir web sayfasını ziyaret etmek benim uygulamada web görünümü koymak
- 24. Android: android studio kullanarak görüntüyü görüntülemek için bitmap kullanırken hata
- 25. Telefon ağının web görünümünde bir web sayfasını nasıl yükleyebilirim?
- 26. Bir işlemi nasıl kaydedebilirim?
- 27. FireFox'ta bir defada birden çok web sayfasını açmak için nasıl kod yazabilirim?
- 28. Tüm liste Görünümü (satırlar)
- 29. Web Görünümü görüntüleme
- 30. Tüm dosya türlerini görüntülemek için hız çubuğunu nasıl etkinleştiririm?
WebView içeriğini yakalamak için bu yöntemi kullanıyorum, ancak CrossWalk WebView üzerinde çalışmıyor. – handrenliang
Çapraz yürüyüşe aşina değilim ama belgelerine baktığımda bunun işe yaramayacağı açıktır. Bunun için çok üzgünüm. XWalkView, web görünümü değil, FrameLayout alt sınıfıdır. Html'inizi web görünümüne yüklemekten ve oradan kaydetmekten sakınan bir şey var mı? –
Bildiğiniz gibi, WebView 4.4 altında Web sayfasını sayfa oluşturmak için kullanır, bu berbat. 4.4'ün altında çalışmayan bir hiper metin düzenleyicisi oluşturuyorum. – handrenliang