Захватите часть приложения и сохраните ее - PullRequest
0 голосов
/ 03 мая 2018

В моем приложении я хочу захватить часть моего приложения для Android UI и сохранить его программно.

Например, я хочу сделать следующие действия:

  1. В Activity/Fragment пользователь нажимает один Button.
  2. захват из части Layout, например, LinearLayout с id="captureMe".
  3. Сохранить захваченное изображение где-нибудь.

как я могу это реализовать?

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Сначала используйте эту функцию, чтобы получить растровое изображение, которое вы хотите захватить:

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;
}
0 голосов
/ 03 мая 2018

Вы можете просто использовать эту функцию, просто передав свой объект просмотра

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();
    }

}
0 голосов
/ 03 мая 2018

Попробуйте это, надеюсь, это работает

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

bitmap = captureMe.getDrawingCache();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...