안드로이드 개발 질문/답변
(글 수 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 메소드를 오버라이드 해서 그쪽으로 코드를 옮겨 사용하세요.