2014-12-25 4 views
7

Как сделать снимок экрана всей активности на Android, даже если контент не отображается? Пример. снять скриншот полного чата и затем сгенерировать файл изображения?Как сделать снимок экрана страницы активности WHOLE программно?

enter image description here

Я хочу скриншот невидимую область тоже.

Благодаря

+0

Что вы пробовали? –

+0

Я пробовал андроидную библиотеку ASL, но демонстрационная работа не работает должным образом. https://code.google.com/p/android-screenshot-library/ –

+0

Я даже не уверен, что это возможно или не технически –

ответ

7

Одним из способов является извлечение растрового изображения текущего экрана и сохранить его. Попробуйте это:

public void takeScreenshot(){ 
    Bitmap bitmap = getScreenBitmap(); // Get the bitmap 
    saveTheBitmap(bitmap);    // Save it to the external storage device. 
} 

public Bitmap getScreenBitmap() { 
    View v= findViewById(android.R.id.content).getRootView(); 
    v.setDrawingCacheEnabled(true); 
    v.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
      MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
    v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight()); 

    v.buildDrawingCache(true); 
    Bitmap b = Bitmap.createBitmap(v.getDrawingCache()); 
    v.setDrawingCacheEnabled(false); // clear drawing cache 
    return b; 
} 

Android take screen shot programmatically

+0

спасибо, да, это работает, но мне нужен скриншот полной активности - не только видимый. :) –

+0

Полная активность как в? Не могли бы вы поделиться снимком экрана с телефоном и необходимым скриншотом? Полная активность, как в текущем, так и в других, которые были созданы в фоновом режиме? – thepace

+1

Я отредактировал свой вопрос, см. Изображение выше, и вы поймете, что мне нужно :) thx –

1

Это один способ взять «снимок» из вида. Я не проверял это так сказать, если он работает

//View v is the root view/parent of your layout, for example LinearLayout or RelativeLayout (layout where you have placed content of which you want to take screenshot) 
private Bitmap getBitmapFromView(View v) { 
    Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas (bitmap); 
    v.draw(canvas); 
    // Returns screenshot 
    return bitmap; 
} 
+0

Спасибо за ваш ответ, да, он работает, но мне нужен скриншот полной активности - не только видимый .. ты меня достал? :) –

+0

@Giorgi Asaturyan Установите scrollview как родительский вид. Таким образом, вы можете сделать снимок экрана, даже если содержимое не видно. Или, если ваш контент находится внутри ListView, вы можете автоматически прокручивать вниз или вверх и делать несколько снимков экрана, а затем объединить их все вместе в одно растровое изображение. Это не так сложно. – user1888162

+0

Я попробую прямо сейчас, спасибо –

0

общественный класс MainActivity расширяет активность {

ImageView imageView = null; 
ScrollView sv = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    sv = (ScrollView) findViewById(R.id.ssscrollView); 
    imageView = (ImageView) findViewById(R.id.imgView); 
    Button myBtn = (Button) findViewById(R.id.btn); 
    myBtn.setOnClickListener(new View.OnClickListener() { 

     @SuppressWarnings("deprecation") 
     @Override 
     public void onClick(View v) { 

      View v1 = sv.getRootView(); 
      v1.setDrawingCacheEnabled(true); 
      Bitmap bm = getBitmapFromView(v1); 
      @SuppressWarnings("deprecation") 
      BitmapDrawable bitmapDrawable = new BitmapDrawable(bm); 
      ImageView view2 = (ImageView) findViewById(R.id.imgView); 
      view2.setBackgroundDrawable(bitmapDrawable); 
     } 
    }); 

} 

private Bitmap getBitmapFromView(View v) { 
    Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    v.draw(canvas); 
    return bitmap; 
} 

}

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