마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

서피스뷰를 캡처하는 방법 질문드립니다.

0 추천
정말 너무나 어렵게 원하는 그림팜 어플을

서피스뷰로 구현했했습니다.

그런데 일반적인 코드로 캡쳐를 했더니 시커먼 화면만 저장이 됩니다.

어떻게 해결을 하면 될지 선배개발자님들께 여쭙습니다.

아래는 제가 화면캡쳐 와 공유기능을 구현하기 위한 코드입니다. 어느부분을 수정해야할까요?

 

public class Share {

    Activity mActivity;
    String filename;
    public Share(PlanSection1A activity) {
          mActivity = activity;
    }
    public Share(ElementalToolActivity activity) {
        mActivity = activity;
    }

    public void save() {
        File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+ "/과학실험설계사");
        if(!dir.exists())
            dir.mkdir();

        try {
            screenshot(mActivity);
        } catch (Exception e) {
        }
    }

    public void screenshot(Activity av2)throws Exception {   

        View view = av2.getWindow().getDecorView();
        view.setDrawingCacheEnabled(true);
        Bitmap screenshot = view.getDrawingCache();
        long now = System.currentTimeMillis();
        Date date = new Date(now);
        SimpleDateFormat sdfNow = new SimpleDateFormat("MM월dd일HH시mm분ss초");
        String strNow = sdfNow.format(date);
        filename = strNow+".jpg";
        try {
            File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/과학실험설계사/" + filename);
            f.createNewFile();
            OutputStream outStream = new FileOutputStream(f);
            screenshot.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
            outStream.close();
            Toast.makeText(mActivity.getApplicationContext(),filename+" 파일명으로 저장되었습니다.", Toast.LENGTH_LONG).show();
        } catch (Exception e) {
        }
        view.setDrawingCacheEnabled(false);
    }

    public void share() {
        shareImage();
    }

    public  void shareImage() {
        if(filename == null) {
            Toast.makeText(mActivity.getApplicationContext(), "캡쳐를먼저해주세요!", Toast.LENGTH_SHORT).show();
        }
        else {
            File share = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/과학실험설계사");
            String file1 = filename;
            File file2 = new File(share, file1);
            Uri uri = Uri.fromFile(file2);
            Intent intent = new Intent(Intent.ACTION_SEND);
            intent.setType("image/jpg");
            intent.putExtra(Intent.EXTRA_STREAM, uri);
            mActivity.startActivity(Intent.createChooser(intent, "공유할App 선택"));
        }
    }
}
a12243 (560 포인트) 님이 2016년 1월 7일 질문

1개의 답변

0 추천
서피스뷰는 스샷저장이 안되요~~!

님이 하신것 처럼 검은색 화면만 나오게 되죠~~!

하지만 서피스뷰의 원리를 조금만 이해 한다면 영 불가능 한것도 아닙니다.

서피스뷰의 스샷은 뷰를 비트맵으로 저장하는것이 아니라 서피스뷰 캔버스에 그리기 전에 캔버스 자체를 비트맵으로 저장하는 방식으로 진행하시면 되요~~!
ThisPlus (46,920 포인트) 님이 2016년 1월 7일 답변
...