Android中的屏幕截图

时间:2010-09-17 09:07:36

标签: android screenshot

我想开发一个应用程序,它将截取android屏幕截图..任何人都知道如何做到这一点..?这类似于koushik duttas屏幕截图。但是没有使用root ..并且任何人都有koushik dutta截图应用程序正在工作..?对我不起作用..请让我知道..谢谢你。

4 个答案:

答案 0 :(得分:19)

假设你点击了一个按钮:

findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
       Bitmap bitmap = takeScreenshot();
       saveBitmap(bitmap);
   }
});

之后你需要这两种方法:

public Bitmap takeScreenshot() {
   View rootView = findViewById(android.R.id.content).getRootView();
   rootView.setDrawingCacheEnabled(true);
   return rootView.getDrawingCache();
}

 public void saveBitmap(Bitmap bitmap) {
    File imagePath = new File(Environment.getExternalStorageDirectory() + "/screenshot.png");
    FileOutputStream fos;
    try {
        fos = new FileOutputStream(imagePath);
        bitmap.compress(CompressFormat.PNG, 100, fos);
        fos.flush();
        fos.close();
    } catch (FileNotFoundException e) {
        Log.e("GREC", e.getMessage(), e);
    } catch (IOException e) {
        Log.e("GREC", e.getMessage(), e);
    }
}

答案 1 :(得分:4)

您可以尝试这样的事情

private RelativeLayout view;

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    view = (RelativeLayout)findViewById(R.id.relativeView);

    View v1 = view.getRootView();

    v1.setDrawingCacheEnabled(true);
    Bitmap bm = v1.getDrawingCache();
}

答案 2 :(得分:3)

方法view.getDrawingCache()将首先尝试检索先前已缓存的图像。如果您想保证屏幕截图是最新的,这可能会导致问题。例如,如果您的用户单击屏幕截图按钮,然后更改UI,然后再次单击它,第二个屏幕截图将与第一个屏幕截图相同,除非您擦除缓存。我发现以下方法更方便:

public Bitmap takeScreenshot() {
  View rootView = findViewById(android.R.id.content).getRootView();
  Bitmap bitmap = Bitmap.createBitmap(rootView.getWidth(), rootView.getHeight(), Bitmap.Config.ARGB_8888);
  Canvas canvas = new Canvas(bitmap);
  rootView.draw(canvas);
  return bitmap;
}

答案 3 :(得分:0)

我认为没有root或SDK是不可能的,抱歉。

我希望被证明是错的。

不是应用,但如果您使用USB线,则可以在PC上安装Android SDK,并使用androidscreencast从PC上截取屏幕截图,而无需使用手机。