2017-02-13 24 views
0

Я пытаюсь сделать снимок экрана с CardView, который имеет тень (высота). Однако скриншот выходит без тени.
Любые идеи?Android скриншот с тегом

Это мой код:

View v = mView.RootView; 
v.DrawingCacheEnabled = true; 
Bitmap b = v.DrawingCache; 

ответ

2

Тени (Elevation В API25 +) аппаратное ускорение и не доступны для кэширования на уровне представления.

Кроме того, если вы отключите аппаратное ускорение для View (на самом деле его родителей), чем эффект подъема также отключить таким образом не доступен для кэширования ...

(aView.Parent as View).SetLayerType(LayerType.Software, null); 

Глазами Cache Capture Пример:

Bitmap CaptureView(View view) 
{ 
    if (view.IsHardwareAccelerated) 
     Toast.MakeText(ApplicationContext, "View Is Hardware Accelerated, Effects will not be captured", ToastLength.Long).Show(); 
    view.BuildDrawingCache(); 
    Bitmap bitmap = view.GetDrawingCache(false); 
    Bitmap bitmapCopy = bitmap.Copy(Bitmap.Config.Argb8888, false); 
    view.DestroyDrawingCache(); 
    return bitmapCopy; 
} 
+0

Значит, я не могу захватить тень? Есть ли обходной путь? – amitairos

+0

@amitairos Вы можете использовать API-интерфейсы Projection в 5.0+ и получить «Поверхность» основного экрана/дисплея по умолчанию, а затем скопировать эту поверхность на родительские координаты представления, которые вы хотите захватить (помните, что «тень» находится не в View, который определяет его, он находится в родительском элементе View ...). Это действительно зависит от вашего случая использования ... – SushiHangover

+0

Можете ли вы объяснить, как получить поверхность основного экрана? Я не знаком с этим. – amitairos