2013-06-19 81 views
8

簡短的問題:是否可以截取視圖而不顯示視圖?

假設我有某種佈局文件,我膨脹它(或使用代碼中的正常CTORs)。

而不是顯示膨脹的視圖,我希望採取一個「截圖」(位圖),它看起來像一些限制(給定寬度的高度,甚至比屏幕更大)的樣子。

我不希望將視圖添加到屏幕上的任何位置,但只是爲了這個目的而將其保留,並可能在以後添加。

這樣的事情可以用於簡單的操作如何放置東西。例如,我可以使用一個圖像放置在其中的佈局,以便它周圍有一個框架。

這樣的事情可能嗎?如果是這樣,怎麼樣?

+0

這是用於測試應用程序?如果是,那麼你可以檢查com.android.systemui.screenshot.ScreenshotTest –

+0

你是什麼意思「測試應用程序」?我想知道它的任何類型的應用程序。 –

+0

我目前無法測試它,但'draw'-method視圖應該能夠繪製到畫布,即使它沒有添加到任何佈局。但是,您需要將其貫穿其生命週期的所有佈局階段。 http://developer.android.com/reference/android/view/View.html#draw%28android.graphics.Canvas%29 – Jave

回答

7

好了,我發現了一個可能的方式做到這一點的基礎上,this link

public static Bitmap drawToBitmap(Context context,final int layoutResId, 
            final int width,final int height) 
{ 
    final Bitmap bmp = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888); 
    final Canvas canvas = new Canvas(bmp); 
    final LayoutInflater inflater = 
     (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    final View layout = inflater.inflate(layoutResId,null); 
    layout.setDrawingCacheEnabled(true); 
    layout.measure(
     MeasureSpec.makeMeasureSpec(canvas.getWidth(),MeasureSpec.EXACTLY), 
     MeasureSpec.makeMeasureSpec(canvas.getHeight(),MeasureSpec.EXACTLY)); 
    layout.layout(0,0,layout.getMeasuredWidth(),layout.getMeasuredHeight()); 
    canvas.drawBitmap(layout.getDrawingCache(),0,0,new Paint()); 
    return bmp; 
} 

使用示例:

public class MainActivity extends ActionBarActivity 
{ 
    @Override 
    protected void onCreate(final Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final ImageView iv = (ImageView)findViewById(R.id.image); 
     final DisplayMetrics metrics = getResources().getDisplayMetrics(); 
     final Bitmap b = drawToBitmap(this,R.layout.test, metrics.widthPixels, 
            metrics.heightPixels); 
     iv.setImageBitmap(b); 
    } 

} 
+0

請勿點擊本答案中的鏈接!這是廣告軟件! – Sevren

+0

@ Nerves82自從上次更改以來。我絕不會把這樣一個有問題的東西放在這裏。此外,VirusTotal表示沒關係,基於67種防病毒軟件:https://www.virustotal.com/en/url/c3279c186440c89052ae0dbd9ac2c1ed5e0663904eed15eae5c49cae348b2f37/analysis/1460416779/ https://www.virustotal.com/en/url/51b003e759a05a34c58ebcb3078de02e73ee779dbffb54ab19ef0711fdd81af5/analysis/ 1460416787/ –

+0

@ Nerves82無論如何,更新後的鏈接顯示以前的內容,使用Wayback –

相關問題