2015-07-25 1 views
1

У меня есть Activity, который содержит MapFragment V2 на половине экрана, а на другой половине есть еще несколько видов, таких как TextViews с подробностями.Активность с моментальным снимком MapFragment

Это как экран выглядит следующим образом: enter image description here

Теперь, я хочу, чтобы сделать снимок всей деятельности включает MapFragment, но когда я пытаюсь сделать это, я получаю изображение но карта часть пустой (полностью черный)!

This is код, который я использую для снятия скриншота, и он отлично работает!

Я знаю о возможности сделать снимок MapFragment, но он занимает только область карты без остальной части экрана. Что-то вроде этого:

GoogleMap.SnapshotReadyCallback callback = new GoogleMap.SnapshotReadyCallback() { 

      @Override 
      public void onSnapshotReady(Bitmap snapshot) { 
       // TODO Auto-generated method stub 
       FileOutputStream out = null; 
       boolean status = true; 
       try { 
        out = new FileOutputStream(sharedImage); 
        snapshot = Bitmap.createScaledBitmap(snapshot, findViewById(R.id.trip_map).getWidth(), 
          findViewById(R.id.trip_map).getHeight(), true); 
        status = snapshot.compress(Bitmap.CompressFormat.JPEG, 100, out); 
        Toast.makeText(TripDetailsActivity.this, "save status: " + status, Toast.LENGTH_SHORT).show(); 
        snapshot.recycle(); 
        snapshot = null; 
        System.gc(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } finally { 
        try { 
         out.flush(); 
         out.close(); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 

       } 
       openShareImageDialog(sharedImage); 
      } 
     }; 
     mMap.snapshot(callback); 

    } 
    return true; 
} 

Кто-нибудь есть идея, как я могу взять весь снимок экрана, когда есть MapFragment там?

+0

AFAIK Google использует OpenGL для рендеринга карты, и нет возможности захватить скриншот представлений OpenGL (кроме моментального снимка GoogleMap). – harism

ответ

0

Попробуйте это в моем случае его работу для меня, я знаю, как такие же, но попробовать с LinearLayout как родитель, держать все элементы в одном родительском макета и принять снимок экрана когда вы хотите:

public void getDrawingBitmap() throws Exception{ 

LinearLayout tabLayout = (LinearLayout)findViewById(R.id.screen_shot_layout); 

    if (tabLayout != null) { 

     Bitmap image = Bitmap.createBitmap(tabLayout.getWidth(), 
       tabLayout.getHeight(), Config.ARGB_8888); 
     Canvas b = new Canvas(image); 
     tabLayout.draw(b); 
     if (image!=null) { 
      // here is your sceenshot 
     }else{ 
      Toast.makeText(DashBord.this, "Unabel to take screen shot", Toast.LENGTH_LONG).show(); 
     } 
    } 



} 
+0

Спасибо, я проверю это. –

+0

Извините, это решение не сработало для меня. Вы уверены, что использовали это с фрагментом карты? Можете ли вы поделиться имиджем? –

0

Вы можете использовать Google функцию обратного вызова карты, как это:

GoogleMap.SnapshotReadyCallback callback = new GoogleMap.SnapshotReadyCallback() { 
      @Override 
      public void onSnapshotReady(Bitmap snapshot) { 
       // create bitmap screen capture 
       Bitmap bitmap = snapshot; 

       OutputStream fout = null; 
       File imageFile = new File(filePath); 

       try { 
        fout = new FileOutputStream(imageFile); 
        bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout); 
        fout.flush(); 
        fout.close(); 

       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 

Теперь звонить с помощью Google Map фрагмент:

map.snapshot(callback); 

 Смежные вопросы

  • Нет связанных вопросов^_^