原理
将布局绘制成位图并保存,然后调用系统自带的分享功能
添加存储权限
- 在AndroidManifest.xml 声明权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2. 高版本Android 要需要动态申请权限
/**
* 动态申请权限
*/
private void checkNeedPermissions() {
//6.0以上需要动态申请权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//多个权限一起申请
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
}, 1);
}
}
截屏保存
/**
* 截屏
*/
public void captureScreen() {
Runnable action = new Runnable() {
@Override
public void run() {
/*获取windows中最顶层的view*/
final View contentView = getWindow().getDecorView();
try {
Log.e("chen", contentView.getHeight() + ":" + contentView.getWidth());
bitmap = Bitmap.createBitmap(contentView.getWidth(), contentView.getHeight(), Bitmap.Config.ARGB_4444);
contentView.draw(new Canvas(bitmap));
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
//将位图的压缩到指定的OutputStream,可以理解成将Bitmap保存到文件中!
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteOut);
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/test/");
if (!file.exists()) {
file.mkdirs();
}
savePic(bitmap, file.toString() + File.separator + "short.png");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != byteOut)
byteOut.close();
if (null != bitmap && !bitmap.isRecycled()) {
// bitmap.recycle();
bitmap = null