2012-01-20 5 views
6

Tôi muốn chụp Nội dung của ImageView bằng cách sử dụng DrawingCache. Tôi viết mã dưới đây.getDrawingCache() luôn trả về null

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

Nhưng tôi chỉ nhận được một hình ảnh trên màn hình. Sau đó tôi đã biết myScreenshot là null

Tôi thấy nhiều bài viết liên quan đến cùng một vấn đề, nhưng không có giải pháp thích hợp.

Tôi nghĩ mọi quyền chúng tôi phải thêm vào tệp kê khai? hoặc quyền root cần thiết để đạt được điều này? Xin hãy giúp tôi về vấn đề này.

Trả lời

10

Thử gọi buildDrawingCache() trước getDrawingCache()

EDIT: Gọi getDrawingCache(), sau khi trang đã được nạp, thay vì onCreate

+0

Tôi đã thêm iv1.buildDrawingCache(); trước getDrawingCache(). không sử dụng –

+0

bạn có kiểm tra xem iv1 có hình ảnh khi ứng dụng chạy không. Cũng xác định chính xác nơi bạn đang gọi mã của bạn. Bạn có thể đang gọi nó trước khi các chế độ xem được khởi tạo – aqs

+0

trong tệp xml chỉ tôi đang cấp cho android: src cho iv1. Mã tôi đăng ở đây là sau setContentView (R.layout.main); in onCreate() Có đúng không? –

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

imageview1.setBackgroundResource(R.drawable.imageview1); 

sử dụng hai hình ảnh này là 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

Bạn không làm iv1.buildDrawingCache(true); thêm dòng trước
Bitmap myScreenshot = iv1.getDrawingCache();

+0

Câu trả lời của bạn là câu trả lời chính xác giống như câu trả lời được chấp nhận bởi @aqs – gecco

2

gọi getDrawingCache() trong onWindowFocusChanged() và không in onCreate(), khi đó bạn sẽ không nhận được giá trị rỗng.

+0

cảm ơn bạn, nó đã làm việc cho tôi! –