簡短的問題:是否可以截取視圖而不顯示視圖?
假設我有某種佈局文件,我膨脹它(或使用代碼中的正常CTORs)。
而不是顯示膨脹的視圖,我希望採取一個「截圖」(位圖),它看起來像一些限制(給定寬度的高度,甚至比屏幕更大)的樣子。
我不希望將視圖添加到屏幕上的任何位置,但只是爲了這個目的而將其保留,並可能在以後添加。
這樣的事情可以用於簡單的操作如何放置東西。例如,我可以使用一個圖像放置在其中的佈局,以便它周圍有一個框架。
這樣的事情可能嗎?如果是這樣,怎麼樣?
簡短的問題:是否可以截取視圖而不顯示視圖?
假設我有某種佈局文件,我膨脹它(或使用代碼中的正常CTORs)。
而不是顯示膨脹的視圖,我希望採取一個「截圖」(位圖),它看起來像一些限制(給定寬度的高度,甚至比屏幕更大)的樣子。
我不希望將視圖添加到屏幕上的任何位置,但只是爲了這個目的而將其保留,並可能在以後添加。
這樣的事情可以用於簡單的操作如何放置東西。例如,我可以使用一個圖像放置在其中的佈局,以便它周圍有一個框架。
這樣的事情可能嗎?如果是這樣,怎麼樣?
好了,我發現了一個可能的方式做到這一點的基礎上,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);
}
}
請勿點擊本答案中的鏈接!這是廣告軟件! – Sevren
@ Nerves82自從上次更改以來。我絕不會把這樣一個有問題的東西放在這裏。此外,VirusTotal表示沒關係,基於67種防病毒軟件:https://www.virustotal.com/en/url/c3279c186440c89052ae0dbd9ac2c1ed5e0663904eed15eae5c49cae348b2f37/analysis/1460416779/ https://www.virustotal.com/en/url/51b003e759a05a34c58ebcb3078de02e73ee779dbffb54ab19ef0711fdd81af5/analysis/ 1460416787/ –
@ Nerves82無論如何,更新後的鏈接顯示以前的內容,使用Wayback –
這是用於測試應用程序?如果是,那麼你可以檢查com.android.systemui.screenshot.ScreenshotTest –
你是什麼意思「測試應用程序」?我想知道它的任何類型的應用程序。 –
我目前無法測試它,但'draw'-method視圖應該能夠繪製到畫布,即使它沒有添加到任何佈局。但是,您需要將其貫穿其生命週期的所有佈局階段。 http://developer.android.com/reference/android/view/View.html#draw%28android.graphics.Canvas%29 – Jave