본문 바로가기
Study/Android

google map fragment snapshot!!

by Answer Choi 2015. 10. 20.
반응형

구글 맵 자바스크립트 V3를 쓰고 있었는데


롤리팝 올라오고 나서인지 얼마전 확인해 보니


구글맵의 폴리라인(polyline)이 캡쳐가 안되네요;;


보는건 제대로 나오지만 캡처만 하면 그렇네요.


요런식으로 마커만 나옵니다.


바로아래 킷캣에서는 제대로 되더군요.


할 수 없이 구글맵 프레그먼트를 적용했는데, 이번엔 지도자체가 검게 나오네요;;


그래서 찾다보니 snapshot이라는 메소드가 있어서 구현했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public void screenshot(){
        GoogleMap.SnapshotReadyCallback callback=new GoogleMap.SnapshotReadyCallback() {
            Bitmap getmap;
            @Override
            public void onSnapshotReady(Bitmap bitmap) {
                getmap=bitmap;
                try{
                    //전체 bitmap만들기
                    Bitmap bm,bmTitle,bmInfo;
                    bm =  Bitmap.createBitmap(shareLayout.getWidth(), shareLayout.getHeight(), Bitmap.Config.ARGB_8888);
                    Canvas canvas = new Canvas(bm);
 
                    //타이틀 부분 비트맵 만들기
                    titlelayout.buildDrawingCache();
                    titlelayout.setDrawingCacheEnabled(true);
                    titlelayout.setDrawingCacheBackgroundColor(Color.WHITE);
                    bmTitle=titlelayout.getDrawingCache();
                    canvas.drawBitmap(bmTitle, 00null);
                    //맵 부분 비트맵 붙이기
                    canvas.drawBitmap(getmap, 0, titlelayout.getHeight(), null);
                    //정보부분 비트맵 만들어 붙이기
                    infolayout.buildDrawingCache();
                    infolayout.setDrawingCacheEnabled(true);
                    infolayout.setDrawingCacheBackgroundColor(Color.WHITE);
                    bmInfo=infolayout.getDrawingCache();
                    canvas.drawBitmap(bmInfo, 0, bmTitle.getHeight()+getmap.getHeight(), null);
 
                    FileOutputStream out;
                    String filename = "/" + System.currentTimeMillis() + ".jpg";
                    filename = Environment.getExternalStorageDirectory().toString() + filename;
 
                    out = new FileOutputStream(filename);
                    bm.compress(Bitmap.CompressFormat.JPEG, 100out);
                    sharintent(filename);
 
                }catch(Exception e){
                    Log.e("error",e.toString()+"");
                }
 
            }
        };
        myMap.snapshot(callback);
 
    }
cs

공유버튼을 눌렀을때 불러오는 함수 입니다.


Line 5 onSnapshotReady 는 지도를 캡쳐해주는 메소드 입니다.


Line 10~11 : 지도만 할게 아니고 위의 시간쪽과 밑에 정보들도 같이 해야되기 때문에 


전체 레이아웃 크기의 비트맵을 만들어 줍니다.


Line 14~18 : 시간쪽 타이틀 정보를 캡쳐해서 비트맵에 붙여줍니다.


Line 20 : snapshot 찍은 지도를 비트맵에 이어서 붙여줍니다.


Line 22~26 : 밑의 정보들을 캡쳐해서 지도밑으로 붙여줍니다.


Line 42 : myMap은 mapfragment에서 얻어온 map입니다.


1
GoogleMap myMap=mapFragment.getMap();
cs





반응형

인기글