2013-07-19 2 views
2

Currrently Я застрял в одной проблеме, которая заключается в том, как сделать снимок экрана карты Google v2. Я разрабатываю одно приложение для отслеживания GPS, в нем одна полилиния рисует отслеживаемый путь. Поэтому я хочу скриншот для карты с полилинией, нарисованной на карте.Android Google Map V2 скриншот

Я сделал много R & D, но обнаружил, что карта Google V2 не предоставляется такого рода объект.

Пожалуйста, помогите мне решить эту проблему.

+0

Можете ли вы скажите, как можно управлять всем маршрутом слежения, будет на скриншоте, так как мы можем сделать снимок экрана, но почему-то это не позволяет нам иметь полный путь, пройденный одним выстрелом. – Harpreet

ответ

1

Поскольку вы используете v2, ваша карта будет управляться либо MapFragment, либо SupportMapFragment. Оба являются подклассами Fragment, которые должны предоставить вам доступ к getView(). Давайте предположим, что у вас есть следующий код в ваш хостинг деятельности:

SupportMapFragment mapFragment = ((SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map)); 
View view = mapFragment.getView(); 

С этой точки зрения вы можете попробовать этот подход How to programmatically take a screenshot in Android?.

+0

Спасибо за ответ, я думаю, что это сработает. –

+0

Я пробовал этот код, но жаль, что знаю, что он не работает. –

+0

Это рушится? Вы не можете сохранить изображение? Изображение не показывает скриншот? Пожалуйста, укажите вашу проблему. – a11n

1

Я основан на этом посту: Capture screen shot of GoogleMap Android API V2

И удалось получить снимок карты с накладками без проблем:

Вот код:

public void captureScreen() 
    { 
     GoogleMap.SnapshotReadyCallback callback = new GoogleMap.SnapshotReadyCallback() 
     { 


      @Override 
      public void onSnapshotReady(Bitmap snapshot) { 
       try { 
        getWindow().getDecorView().findViewById(android.R.id.content).setDrawingCacheEnabled(true); 
        Bitmap backBitmap = getWindow().getDecorView().findViewById(android.R.id.content).getDrawingCache(); 
        Bitmap bmOverlay = Bitmap.createBitmap(
          backBitmap.getWidth(), backBitmap.getHeight(), 
          backBitmap.getConfig()); 
        Canvas canvas = new Canvas(bmOverlay); 
        canvas.drawBitmap(snapshot, new Matrix(), null); 
        canvas.drawBitmap(backBitmap, 0, 0, null); 

        OutputStream fout = null; 

        String filePath = System.currentTimeMillis() + ".jpeg"; 

        try 
        { 
         fout = openFileOutput(filePath, 
           MODE_WORLD_READABLE); 

         // Write the string to the file 
         bmOverlay.compress(Bitmap.CompressFormat.JPEG, 90, fout); 
         fout.flush(); 
         fout.close(); 
        } 
        catch (FileNotFoundException e) 
        { 
         // TODO Auto-generated catch block 
         Log.d("ImageCapture", "FileNotFoundException"); 
         Log.d("ImageCapture", e.getMessage()); 
         filePath = ""; 
        } 
        catch (IOException e) 
        { 
         // TODO Auto-generated catch block 
         Log.d("ImageCapture", "IOException"); 
         Log.d("ImageCapture", e.getMessage()); 
         filePath = ""; 
        } 

        openShareImageDialog(filePath); 


       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 

     ; 


     map.snapshot(callback); 
    } 

Затем я использую этот метод для обмена в социальных сетях:

 public void openShareImageDialog(String filePath) 
     { 
      File file = this.getFileStreamPath(filePath); 

      if(!filePath.equals("")) 
      { 
       final ContentValues values = new ContentValues(2); 
       values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); 
       values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath()); 
       final Uri contentUriFile = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 

       final Intent intent = new Intent(android.content.Intent.ACTION_SEND); 
       intent.setType("image/jpeg"); 
       intent.putExtra(android.content.Intent.EXTRA_STREAM, contentUriFile); 
       startActivity(Intent.createChooser(intent, "Share Image")); 
      } 
      else 
      { 
       //This is a custom class I use to show dialogs...simply replace this with whatever you want to show an error message, Toast, etc. 
       // DialogUtilities.showOkDialogWithText(this, R.string.shareImageFailed); 

       Toast.makeText(getBaseContext(),"Se pelo",Toast.LENGTH_SHORT).show(); 
      } 
     }