捕获应用程序的一部分并保存

时间:2018-05-03 08:13:03

标签: android android-layout android-studio

在我的应用中,我想捕获我的Android应用 UI 的一部分并以编程方式保存。

例如,我想做这个动作:

  1. Activity/Fragment用户点击一个Button
  2. 来自Layout部分的
  3. 捕获,例如LinearLayout id="captureMe"。{/ li>
  4. 在某处保存捕获的图片。
  5. 我该如何实现它?

3 个答案:

答案 0 :(得分:2)

试试这个,希望它有效

LinearLayout captureMe = (LinearLayout)findViewById(R.id.captureMe);
captureMe.setDrawingCacheEnabled(true);
captureMe.buildDrawingCache();

bitmap = captureMe.getDrawingCache();

答案 1 :(得分:2)

您只需使用此功能即可传递您的视图对象

public Bitmap viewToBitmap(View view) {
    Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    view.draw(canvas);
    return bitmap;
}

然后保存此文件

    public void saveImage(Bitmap inImage) {

    String root = Environment.getExternalStorageDirectory().toString();
    File mydir = new File(root + "/demo/");
    mydir.mkdirs();

    String fname = "Image.jpeg";

    File file = new File (mydir, fname);
    String path2=file.getPath();
    Uri uri=Uri.fromFile(file);

    try {
        FileOutputStream out = new FileOutputStream(file);


        inImage.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.flush();
        out.close();
    }catch (Exception e)
    {
        e.printStackTrace();
    }

}

答案 2 :(得分:1)

首先使用此函数获取要捕获的视图位图:

public static Bitmap getViewBitmap(View v, int width, int height) {
    Bitmap viewBitmap = Bitmap.createBitmap(width , height, 
    Bitmap.Config.ARGB_8888);                
    Canvas c = new Canvas(viewBitmap);
    v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
    v.draw(c);
    return viewBitmap;
}

然后使用此代码将此位图保存到存储:

String path = Environment.getExternalStorageDirectory().toString();
OutputStream fOutputStream = null;
File file = new File(path + "/Captures/", "screen.jpg");
try {
    fOutputStream = new FileOutputStream(file);
    capturedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOutputStream);
    fOutputStream.flush();
    fOutputStream.close();
    MediaStore.Images.Media.insertImage(getContentResolver(),   
    file.getAbsolutePath(), file.getName(), file.getName());
} catch (FileNotFoundException e) {
    e.printStackTrace();
    Toast.makeText(this, "Save Failed", Toast.LENGTH_SHORT).show();
    return;
} catch (IOException e) {
    e.printStackTrace();
    Toast.makeText(this, "Save Failed", Toast.LENGTH_SHORT).show();
    return;
}