java通知图库更新视频_将某个布局存为图片(解决实时通知相册时出现两张图片的bug)...

import android.app.Activity;

import android.content.ContentValues;

import android.content.Intent;

import android.graphics.Bitmap;

import android.net.Uri;

import android.os.Environment;

import android.provider.MediaStore;

import android.view.View;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Locale;

/**

* 将某个布局存为图片

*

* @author jdallen

* @since 2019/4/30

*/

public class ViewToPictureUtil {

public static void viewSaveToImage(Activity activity, View view, int type, SavePictureToLocalListener savePictureToLocalListener) {

// 把一个View转换成图片

view.setDrawingCacheEnabled(true);

view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);

//view.setDrawingCacheBackgroundColor(Color.BLACK);

//修复布局过大,导致生成的Bitmap为空的bug

int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(WindowUtil.getWindowWidth(activity), View.MeasureSpec.EXACTLY);

int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec((int) (WindowUtil.getWindowHeight(activity) * 0.82), View.MeasureSpec.EXACTLY);

view.measure(widthMeasureSpec, heightMeasureSpec);

//view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));

view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());

view.buildDrawingCache();

//根据View生成Bitmap

Bitmap bitmap = view.getDrawingCache();

// 判断手机设备是否有SD卡

boolean isHasSDCard = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);

if (isHasSDCard) {

//系统相册目录

try {

File file = createImageFile();

FileOutputStream fos = new FileOutputStream(file);

bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);

fos.flush();

fos.close();

// 保存过后释放资源

view.destroyDrawingCache();

// 其次把文件插入到系统图库

String fileName = file.getName();

LogHelper.e("ATU图片路径:", fileName);

//保存

ContentValues values = new ContentValues();

values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());

values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");

activity.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

//最后通知图库更新

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);//扫描单个文件

intent.setData(Uri.parse("file://" + file.getAbsolutePath()));

activity.sendBroadcast(intent);

savePictureToLocalListener.saveSuccess("已将收款码保存到相册");

} catch (Exception e) {

e.printStackTrace();

savePictureToLocalListener.saveFailure("生成图片抛出异常" + e.toString());

}

} else {

savePictureToLocalListener.saveFailure("您的手机没有SD卡,无法保存收款码");

}

}

private static File createImageFile() throws IOException {

// Create an image file name

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.ENGLISH).format(new Date());

String imageFileName = "JPEG_" + timeStamp + ".jpg";

File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

if (!storageDir.exists()) {

if (!storageDir.mkdir()) {

LogHelper.e("TAG", "Throwing Errors....");

throw new IOException();

}

}

LogHelper.e("ATU图片路径:", imageFileName);

return new File(storageDir, imageFileName);

}

public interface SavePictureToLocalListener {

void saveSuccess(String msg);

void saveFailure(String errMsg);

}

}

import android.content.Context;

import android.view.WindowManager;

/**

* 屏幕宽高管理类

*

* @author jdallen

* @since 2019/3/21

*/

public class WindowUtil {

public static int getWindowHeight(Context context) {

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

return wm.getDefaultDisplay().getHeight();

}

public static int getWindowWidth(Context context) {

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

return wm.getDefaultDisplay().getWidth();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值