3 回答
![?](http://img1.sycdn.imooc.com/5333a207000118af02200220-100-100.jpg)
TA贡献2021条经验 获得超8个赞
根据这个链接,可以在android sdk的tools目录中使用ddms进行屏幕截图。
要在应用程序中执行此操作(而不是在开发期间),还有一些应用程序可以执行此操作。但正如@ zed_0xff指出的那样,肯定需要root。
![?](http://img1.sycdn.imooc.com/545865470001bf9402200220-100-100.jpg)
TA贡献1871条经验 获得超8个赞
使用以下代码:
Bitmap bitmap;View v1 = MyView.getRootView();v1.setDrawingCacheEnabled(true);bitmap = Bitmap.createBitmap(v1.getDrawingCache());v1.setDrawingCacheEnabled(false);
这MyView
是View
我们需要在屏幕中包含的内容。你也可以DrawingCache
通过View
这种方式获得(没有getRootView()
)。
还有另一种方式..
如果我们ScrollView
以root身份查看,那么最好使用以下代码,
LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);FrameLayout root = (FrameLayout) inflater.inflate(R.layout.activity_main, null); // activity_main is UI(xml) file we used in our Activity class. FrameLayout is root view of my UI(xml) file.root.setDrawingCacheEnabled(true);Bitmap bitmap = getBitmapFromView(this.getWindow().findViewById(R.id.frameLayout)); // here give id of our root layout (here its my FrameLayout's id)root.setDrawingCacheEnabled(false);
这是getBitmapFromView()
方法
public static Bitmap getBitmapFromView(View view) { //Define a bitmap with the same size as the view Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888); //Bind a canvas to it Canvas canvas = new Canvas(returnedBitmap); //Get the view's background Drawable bgDrawable =view.getBackground(); if (bgDrawable!=null) //has background drawable, then draw it on the canvas bgDrawable.draw(canvas); else //does not have background drawable, then draw white background on the canvas canvas.drawColor(Color.WHITE); // draw the view on the canvas view.draw(canvas); //return the bitmap return returnedBitmap; }
它将显示整个屏幕,包括隐藏在ScrollView
还有另一种更好的截屏方式。
我在这里截了屏幕截图WebView
。
WebView w = new WebView(this); w.setWebViewClient(new WebViewClient() { public void onPageFinished(final WebView webView, String url) { new Handler().postDelayed(new Runnable(){ @Override public void run() { webView.measure(View.MeasureSpec.makeMeasureSpec( View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); webView.layout(0, 0, webView.getMeasuredWidth(), webView.getMeasuredHeight()); webView.setDrawingCacheEnabled(true); webView.buildDrawingCache(); Bitmap bitmap = Bitmap.createBitmap(webView.getMeasuredWidth(), webView.getMeasuredHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); Paint paint = new Paint(); int height = bitmap.getHeight(); canvas.drawBitmap(bitmap, 0, height, paint); webView.draw(canvas); if (bitmap != null) { try { String filePath = Environment.getExternalStorageDirectory() .toString(); OutputStream out = null; File file = new File(filePath, "/webviewScreenShot.png"); out = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.PNG, 50, out); out.flush(); out.close(); bitmap.recycle(); } catch (Exception e) { e.printStackTrace(); } } } }, 1000); } });
希望这可以帮助..!
![?](http://img1.sycdn.imooc.com/5458463b0001358f02200220-100-100.jpg)
TA贡献1993条经验 获得超5个赞
AFAIK,目前捕获android截图的所有方法都使用/ dev / graphics / fb0 framebuffer。这包括ddms。它确实需要root才能从此流中读取。ddms使用adbd来请求信息,因此不需要root,因为adb具有从/ dev / graphics / fb0请求数据所需的权限。
帧缓冲包含2 +“帧”的RGB565图像。如果您能够读取数据,则必须知道屏幕分辨率才能知道获取图像需要多少字节。每个像素为2个字节,因此如果屏幕分辨率为480x800,则必须为该图像读取768,000个字节,因为480x800 RGB565图像具有384,000个像素。
- 3 回答
- 0 关注
- 1305 浏览
添加回答
举报