保存图片原始代码
但这种事无法保存超出屏幕宽度的图片的
public static File saveBitmap(View view, String filePath, String fileName) {
if (view == null) {
return null;
} else {
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
return saveBitmap(view.getDrawingCache(), filePath, fileName, false);
}
}
public static File saveBitmap(Bitmap bitmap, String filePath, String fileName, Boolean recycle) {
File outputFile = new File(filePath, fileName);
if (outputFile.exists()) {
Log.e("BitmapUtils", "文件" + outputFile.getPath() + "已存在");
return outputFile;
} else if (bitmap != null && !bitmap.isRecycled()) {
FileOutputStream fos = null;
try {
Log.i("BitmapUtils", "开始转换图片");
if (filePath.endsWith("/")) {
FileUtils.mkdir(filePath.substring(0, filePath.length() - 1));
} else {
FileUtils.mkdir(filePath);
}
outputFile.createNewFile();
fos = new FileOutputStream(outputFile);
boolean compressOk = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
if (!compressOk) {
outputFile = null;
}
} catch (Exception var9) {
var9.printStackTrace();
} finally {
if (recycle) {
bitmap.recycle();
}
FZUtils.flush(fos);
FZUtils.close(fos);
}
return outputFile;
} else {
return null;
}
}
保存超出屏幕宽度的图片
需要注意的是,需要声明 android:clipChildren="false"
灵感来源 https://blog.csdn.net/hailong0529/article/details/88677358
public static Bitmap getLinearLayoutBitmap(LinearLayout linearLayout) {
int h = 0;
Bitmap bitmap;
for (int i = 0; i < linearLayout.getChildCount(); i++) {
h += linearLayout.getChildAt(i).getHeight();
}
// 创建对应大小的bitmap
bitmap = Bitmap.createBitmap(linearLayout.getWidth(), h,
Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bitmap);
linearLayout.draw(canvas);
return bitmap;
}
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false">
<LinearLayout
android:id="@+id/layoutContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
android:orientation="horizontal"
android:clipChildren="false"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
当然,还需要使用 setLayoutParams 的方式,确定 layoutContent 的宽高,否则可能截出来的图不是你想要的。