2012-01-20 29 views
6

Chcę przechwycić zawartość ImageView za pomocą DrawingCache. Napisałem poniższy kod.getDrawingCache() zawsze zwraca wartość null

iv1 = (ImageView)findViewById(R.id.iv1); 
iv2 = (ImageView)findViewById(R.id.iv2);    
iv1.setDrawingCacheEnabled(true); 
Bitmap myScreenshot = iv1.getDrawingCache(); 
iv2.setImageBitmap(myScreenshot); 

Ale dostaję tylko jeden obraz na ekranie. Później poznałem myScreenshot ma wartość null

Widziałem wiele postów dotyczących tego samego problemu, ale brak odpowiedniego rozwiązania.

Myślałem, że jakieś uprawnienia musimy dodać w manifeście? lub uprawnienia root wymagane do osiągnięcia tego? Pomóż mi w rozwiązaniu tego problemu.

Odpowiedz

10

Spróbuj zadzwonić buildDrawingCache() przed getDrawingCache()

EDIT: połączeń getDrawingCache() po stronie zostały załadowane, zamiast onCreate

+0

Dodałem iv1.buildDrawingCache(); przed getDrawingCache(). nie używać –

+0

czy sprawdziłeś, czy iv1 ma obraz po uruchomieniu aplikacji. Określ także, gdzie dokładnie dzwonisz do swojego kodu. Możesz wywoływać go przed inicjalizacją widoków – aqs

+0

tylko w pliku xml daje Android: src dla iv1. Kod, który tu napisałem, jest po metodzie setContentView (R.layout.main); w onCreate() Czy to jest poprawne? –

0
imageview.setBackgroundResource(R.drawable.imageview);     

imageview1.setBackgroundResource(R.drawable.imageview1); 

użyć tego dwa obrazy jest screan

<RelativeLayout 
    android:id="@+id/item"    
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <ImageView 
     android:id="@+id/image" 
     android:layout_width="320dp" 
     android:layout_height="486dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:background="@drawable/iv1" /> 

    <ImageView 
     android:id="@+id/ic_launcer" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:background="@drawable/iv2" /> 

</RelativeLayout> 
1

Nie musisz robić iv1.buildDrawingCache(true); dodać linię przed
Bitmap myScreenshot = iv1.getDrawingCache();

+0

Twoja odpowiedź jest dokładnie taka sama jak odpowiedź przyjęta przez @aqs – gecco

2

połączeń getDrawingCache() in onWindowFocusChanged(), a nie w onCreate(), to nie będzie zerowy.

+0

dziękuję, zadziałało to dla mnie! –

Powiązane problemy