2011-12-09 250 views
0

我正在尝试拍摄屏幕截图并将其保存为sdcard上的png文件。我的文件以1.57Kb的文件大小保存,但是它是黑色的。我使用下面的代码:屏幕截图为黑色

View content = findViewById(R.id.id_ll_SurfaceView); 
content.setDrawingCacheEnabled(true); 
Bitmap b = content.getDrawingCache(); 
b.createBitmap(800, 480, Config.ARGB_8888); 
File file = new File("/sdcard/test.png"); 
try 
{ 
    file.createNewFile(); 
    FileOutputStream fos = new FileOutputStream(file); 
    FileOutputStream(
     Environment.getExternalStorageDirectory().getAbsoluteFile()+"/test.jpg")); 
    b.compress(CompressFormat.PNG, 100, fos); 
    fos.close(); 
    Toast.makeText(getApplicationContext(), "Saved", 0).show(); 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 
+0

你在哪里调用代码?视图'id_ll_SurfaceView'已经在执行此代码的屏幕上呈现? – Karthik

+0

你也可以查看[这里](http://stackoverflow.com/questions/8294110/taking-screenshot/8366223#8366223)。 –

+0

'b.createBitmap(800,480,Config.ARGB_8888);'行是完全无用的......''createBitmap'是静态函数,你忽略了返回的位图。我认为你的意思是调整位图的大小。 – st0le

回答

1

我做的只是,

main.setDrawingCacheEnabled(true); 
screenshot = Bitmap.createBitmap(main.getDrawingCache()); 
File file = new File("/sdcard/test.png"); 
     try 
     { 
      file.createNewFile(); 
      FileOutputStream fos = new FileOutputStream(file); 
      screenshot.compress(CompressFormat.PNG, 100, fos); 
      fos.close(); 
      Toast.makeText(getApplicationContext(), "Saved", 0).show(); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

这里主要是你的活动的看法 ..

编辑:看这个教程Android take screenshot from code

+0

可以üPLZ编辑我的代码? – Noman

+0

@ user370305您是否可以复制您的主要活动?不知道如何包含getDrawingcache和serDrawingCacheEnabled()函数。谢谢 –

+0

@Noman你能分享一下完整的代码吗? –

2

你是否从onCreate()获取屏幕截图..你必须等到查看在screen..Use ViewTreeObserver被完全抽出来获得一个回调时视图完全在屏幕上绘制..

加入的onCreate这个代码..

ViewTreeObserver vto = yourView.getViewTreeObserver(); 

vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
    layout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
    yourScreenshotFunction(); 
    } 
}); 

现在实现这个功能

public void yourScreenshotFunction(){ 
//Add your screenshot taking code here.. 
} 

见我的问题here ..我已经解释下标题最后结果的过程..

0

转到蚀...

  1. 转到Windows
  2. 开放视野
  3. DDMS
  4. 选择您的左手边仿真器或手机。
  5. 单击工具栏上方的摄像头图标。
  6. 容易因为:)
+0

@ user1025013 ...用户不会在他的手机中使用Eclipse进行应用程序! – Noman

+0

@Noman是的,他说他只是想要一个手机的屏幕截图,而不是一个应用程序来做到这一点......他想创建一个应用程序,但它显示了一些已经完成的应用程序 – user1025013