안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요 View 캡쳐관련하여 테스트중에 안되는 부분이 있어 질문드립니다.
코드로 화면캡쳐하는 인터넷에서 흔히 볼 수 있던 소스로 View 캡쳐 후 디바이스에 파일로 저장되는 것을 확인하였습니다.
문제는 버튼을 클릭하였을 경우 캡쳐된 View의 Bitmap 이 정상인데
버튼 클릭으로 캡쳐하지 않고 onCreate()에서 바로 캡쳐 하려고 하면 Bitmap 이 null 이 됩니다.
아래 onCreate()에서 주석처리한 부분으로 하면 Bitmap이 null 이되는데
왜 null이 되고 해결방법은 무엇있지 알려주시면 감사하겠습니다.
package july.insung.capture;
import android.app.Activity; import android.graphics.Bitmap; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.LinearLayout;
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream;
public class SampleCapture extends Activity {
LinearLayout view1;
Bitmap bm; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
view1 = (LinearLayout)findViewById(R.id.screen);
//View v1 = view1.getRootView();
//System.out.println("Root View : "+v1);
//v1.setDrawingCacheEnabled(true);
//bm = v1.getDrawingCache();
//System.out.println("Bitmap : "+bm);
//showScreen(bm); Button myBtn = (Button)findViewById(R.id.myBtn);
myBtn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
View v1 = view1.getRootView();
System.out.println("Root View : "+v1);
v1.setDrawingCacheEnabled(true);
bm = v1.getDrawingCache();
System.out.println("Bitmap : "+bm);
showScreen(bm);
}
});
} /**
* ��ü ��ũ�� �̹��� ����
* @param bm
*/
private void showScreen(Bitmap bm) {
try {
File path = new File("/sdcard/samplecapture"); if(! path.isDirectory()) {
path.mkdirs();
} FileOutputStream out = new FileOutputStream("/sdcard/samplecapture/whole_screen.jpg");
bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
} catch (FileNotFoundException e) {
Log.d("FileNotFoundException:", e.getMessage());
}
}
}



onCreate가 끝나야 화면에 로딩됩니다.
화면에 로딩이 되어야 뷰에서 비트맵을 가져올 수 있습니다.
onWindowFocusChanged 메소드를 오버라이드 해서 그쪽으로 코드를 옮겨 사용하세요.