2017-02-13 137 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); 

一個視圖緩存捕捉例:

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您可以使用5.0+以上的Projection API,並獲得主屏幕/默認顯示的「Surface」,然後將該Surface剪輯到您希望捕獲的視圖的父座標上(記住「陰影」不在視圖定義它,它在該視圖的父級中。這真的取決於你的使用情況... – SushiHangover

+0

你能解釋如何獲得主屏幕的表面?我不熟悉這一點。 – amitairos