담아두다 : 사진 다이어리 어플
https://play.google.com/store/apps/details?id=hbs.com.mycollation
떡락계산기 : 코인 계산기, 포트폴리오, 시세 조회 어플
https://play.google.com/store/apps/details?id=hbs.com.dduckrock
[Android 공유하기 기능 만들기]
우측 상단에 공유하기라는 TextView를 누르게 되면 현재 뷰를 intent를 통해서 보내는 작업을 하겠습니다.
주요하게 생각하는 것은 크게 2개 입니다.
1. 무엇을 인텐트 하는가?
2. 비트맵을 어떻게 클리어할 것 인가?
1. 무엇을 인텐트 하는가?
share_menuTV.setOnClickListener(view -> { //버튼을 누르게 되면
if (rootView != null) {
rootView.setDrawingCacheEnabled(false);
rootView.destroyDrawingCache();
rootView = null;
}
rootView = findViewById(android.R.id.content).getRootView();//findViewById를 통해서 루트뷰에 접근하고rootView.setDrawingCacheEnabled(true);//setDrawingCacheEnabled를 통해서 rootView의 cache를 그릴 수 있게 하고
rootView.buildDrawingCache();//buildDrawingCahce를 통해서 rootView의 cache를 그립니다.
if (captureView != null) {
captureView.recycle();
captureView = null;
}
captureView = Bitmap.createBitmap(rootView.getDrawingCache()); //getDrawingCache를 통해서 위에서 그린 cahce를 가져옵니다.
String bitmapPath = MediaStore.Images.Media.insertImage(getContentResolver(), captureView, "title", null); //이미지를 insert하고
Uri bitmapUri = Uri.parse(bitmapPath);//경로를 통해서 Uri를 만들어서
Intent intent = new Intent(Intent.ACTION_SEND); //전송 인텐트를 만들고
intent.setType("image/*");//image형태로
intent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
startActivity(intent);//전송합니다.
});
2. 비트맵을 어떻게 클리어 할 것인가?
share_menuTV.setOnClickListener(view -> {
if (rootView != null) {
rootView.setDrawingCacheEnabled(false);
rootView.destroyDrawingCache(); //bitmap 클리어
rootView = null;
}
rootView = findViewById(android.R.id.content).getRootView();
rootView.setDrawingCacheEnabled(true);
rootView.buildDrawingCache();//bitmap 생성
if (captureView != null) {
captureView.recycle();
captureView = null;
}
captureView = Bitmap.createBitmap(rootView.getDrawingCache());
String bitmapPath = MediaStore.Images.Media.insertImage(getContentResolver(), captureView, "title", null);
Uri bitmapUri = Uri.parse(bitmapPath);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
startActivity(intent);//버튼을 누르게 되면
});
오늘 코드를 작성하면서 아쉬웠던 점은
buildDrawingCache(true)를 했고
destroyDrawingCache(true)를 하면서
계속해서 bitmap이 남았던 것이 아쉬웠다.
정답은 로직에 따라서
.
.
.
buildDrawingCache()
after
destroyDrawingCache()
였다.