Android 공부

Android 공유하기 기능 만들기


담아두다 : 사진 다이어리 어플

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()


였다.