如何保存图片中activity的文字?

how to save the text of the activity in an image?

我需要获取视图中的文本,并保存图像格式。我需要将图像存储在设备的外部存储器中。

public class MainActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
        TextView textView = (TextView) findViewById(R.id.text);
    }
}

我个人使用这个:

public static Bitmap fromView(@NonNull final View view) {
    final DisplayMetrics displayMetrics = ApplicationHelper.resources().getDisplayMetrics();
    if (displayMetrics == null) {
        LogHelper.warning("DisplayMetrics was NULL");
        return null;
    }

    view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
    view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
    view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);
    view.buildDrawingCache();

    final Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
    final Canvas canvas = new Canvas(bitmap);
    view.draw(canvas);
    return bitmap;
}

此方法 returns 任何 ViewBitmap,就像(View 的屏幕截图)。

然后您可以存储或上传此 Bitmap 作为证据。

我使用这个解决方案

public void saveScreenshotOnDisk (final View view, final Context context, final String folder, final String title, final String description) {

    final String state = Environment.getExternalStorageState();
    if (state.equals(Environment.MEDIA_MOUNTED)) {
        final Bitmap screenshot = screenShot(view, context);
        final File folderPath = new File(Environment.getExternalStorageDirectory().toString() + File.separatorChar + folder + File.separatorChar + "" + "s");
        if (!folderPath.exists()) {
            folderPath.mkdirs();
        }

        final String imagePath = folderPath.getAbsolutePath() + File.separatorChar + "Receipt" + "_" + System.currentTimeMillis() + ".png";
        OutputStream fout = null;
        File imageFile = new File(imagePath);
        try {
            fout = new FileOutputStream(imageFile);
            screenshot.compress(Bitmap.CompressFormat.JPEG, 90, fout);
            MediaStore.Images.Media.insertImage(context.getContentResolver(), screenshot, title, description);

            Toast.makeText(context, "Verifique a pasta " + folder + " .", Toast.LENGTH_LONG).show();
        } catch (Exception e) {
            BBLog.w(TAG + ".saveScreenshotOnDisk", e.getMessage());
        }finally{
            try {
                if(fout != null){
                    fout.flush();
                    fout.close();
                }
            } catch (Exception e2) {}
        }
    }
}

public static Bitmap screenShot(final View view, final Context context) {
    view.setBackgroundColor(Color.WHITE);

    Bitmap capture = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(capture);
    view.draw(c);

    view.setBackgroundColor(Color.TRANSPARENT);

    shootSound(context);

    return capture;
}