Bir ScrollView için ekran görüntüsü almam gerekiyor. Kodum feryat geçerli:ekran alıntısı çalışan iş parçacığı içinde bir ScrollView olsun
benimmScrollView
içeriğin bir kısmını aşağı kaydırma gizli kalır o kadar uzun olduğu için, ekran görüntüsü (yaklaşık 100 ms) yakalayan çok vakit geçiren ve geçici olarak UI iş parçacığı durdurur
private File getScreenShot() {
final int count = mScrollView.getChildCount();
int height = 0;
for (int i = 0; i < count; i++) {
View view = mScrollView.getChildAt(i);
height += view.getHeight();
}
// get screen shot bitmap
Bitmap bitmap = Bitmap.createBitmap(mScrollView.getWidth(), height,
Bitmap.Config.RGB_565);
final Canvas canvas = new Canvas(bitmap);
mScrollView.draw(canvas);
// save to a temp file
return saveToFile(bitmap);
}
. Bu yüzden, yöntemi başka bir iş parçacığında çalıştırmaya karar verdim. Kod sever: ilginç
new Thread() {
@Override
public void run() {
System.out.println(Thread.currentThread());
mShareFile = getScreenShot();
mHandler.sendEmptyMessage(96);
}
}.start();
Ama bir şey geldi: Ben Thread
ve AsyncTask
bir alt sınıfını kullanmaya çalıştı. Her biri işi en çok zamanda yapabilir. Ancak, birkaç kez bir istisna atılır ve uygulama çökmesine neden olacak:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Ama nasıl en sürede başarıyla kod çalıştırabilir? Yani, bu istisnayı alabilirsem, gerçekten yanlış bir şey yaptım (View.draw(Canvas)
'u ana iş parçacığının dışında arayın). Kod üçüncü kez gerçekleşirken ilk veya ikinci kez çalıştırıldığında başarısızlık olmayacak. Ve ScrollView
'u kaydırmaya çalıştım ve durmadan önce yöntemi çağırıp kazaya neden olabilir. Ama aynı şeyi ilk kez yaparsam, kaza da olmaz.
ben çıkış parçacığı, ana gruba aittir - bu garip sonuç oldu nedenini bilmiyorum
> [ana Konu XXXXX, 5,]? Birisi bana nedenini söyleyebilir mi? ScrollView
ekran resmini başka bir dizine nasıl alabilirim?
Çizim önbelleği kullanışsız, scrollview için boş bir bitmap oluşturacaktır. – ywwynm
Üzgünüm, haklısın. Ayrıca eski bir proje ve tuval de doğrulanmıştı. Herhangi bir sorun zor olmadı, bu yüzden ekranınızın görünümleri ile yüklendiğini varsayalım :). Ben hala scrollview yerine çocuklarla giderdim. – user3802077