2015-11-14 3 views
0

Я новичок в функции android функции и библиотеки, поэтому я спрашиваю, есть ли другой способ включить функцию скриншота в моем приложении, не укоряя мой телефон?Как включить функцию скриншота без укорачивания телефона?

Почти все статьи, которые я прочитал здесь, приводят только к укоренению телефона в приложении, чтобы применить функцию скриншота. Тем не менее, я поставил один из ответов на код в этих статьях и просто вернул черное изображение, так как мой телефон не укоренен. Я полагаю.

Есть ли другой способ или я должен начать укорачивать свой телефон сейчас?

+1

Вы хотите получить скриншоты своего приложения или хотите сделать скриншоты в любом месте? –

+0

Просто снимок экрана внутри моего приложения @MikeM. –

ответ

0

Вам не нужна библиотека или корень, чтобы получить скриншоты собственного приложения, так как приложение имеет доступ ко всем своим собственным View. Нам просто нужно получить ActivityDecorView и нарисовать его Bitmap через Canvas. Следующий способ включает параметр booleancropStatusBar для размещения захватов режима погружения.

public static Bitmap getActivityScreenshot(Activity activity, boolean cropStatusBar) { 
    int statusBarHeight = 0; 

    if (cropStatusBar) { 
     int resId = activity.getResources().getIdentifier("status_bar_height", "dimen", "android"); 
     statusBarHeight = activity.getResources().getDimensionPixelSize(resId); 
    } 

    View decor = activity.getWindow().getDecorView(); 
    Bitmap result = Bitmap.createBitmap(decor.getWidth(), 
             decor.getHeight() - statusBarHeight, 
             Bitmap.Config.ARGB_8888); 
    Canvas c = new Canvas(result); 

    decor.setDrawingCacheEnabled(true); 
    Bitmap bmp = decor.getDrawingCache(); 
    Rect src = new Rect(0, statusBarHeight, bmp.getWidth(), bmp.getHeight()); 
    Rect dst = new Rect(0, 0, result.getWidth(), result.getHeight()); 
    c.drawBitmap(bmp, src, dst, null); 
    decor.setDrawingCacheEnabled(false); 

    return result; 
} 
+0

О, я вижу. Благодаря! Могу ли я спросить, каково первоначальное значение cropStatusBar и где обновляется cropStatusBar? Кроме того, каковы параметры getIdentifier resId? –

+0

Исходное значение для параметра метода в Java отсутствует. Вы должны указать 'boolean' для вызова метода. Если ваша активность не захватывает (скрывает строку состояния), вы, вероятно, хотите передать «true» для «cropStatusBar». Метод getIdentifier() 'возвращает идентификатор для заданного имени, типа и пакета ресурса. Так получилось, что 'status_bar_height' является скрытым именем ресурса, поэтому мы должны получить соответствующий идентификатор с этим методом. Вы не хотите ничего менять в этом вызове метода. –

+0

Я забыл упомянуть, что этот метод можно изменить, чтобы получить скриншоты определенных представлений. Это не должно быть всей деятельности. Просто FYI. –

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