图片浏览本地保存

写写笔记记录一下项目中写的图片浏览及系统图库保存的功能,先看看效果:


如上,类似于相册浏览,最终将图片保存在本地,在系统图库可浏览,至于可缩放的imageview就不做说明了,直接用了,做法很多可以自行google,下面代码主要说明怎样从网络保存到本地图库的

首先findviewbyid获得保存按钮,点击事件中做图片保存:

//点击保存按钮,将当页图片保存在本地
mTvSave.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //下载图片
        saveBitmap();
        mSaveDialog = ProgressDialog.show(ViewPagerActivity.this, "保存图片", "图片正在保存中,请稍等...", true);
        mSaveDialog.setCancelable(true);
    }
});
点击保存按钮首先执行保存图片的saveBitmap()方法并弹出保存图片的对话框,接下来看看saveBitmap()方法:

/**
 * 获取图片bitmap,开启储存本地的线程
 */
public void saveBitmap(){

    String time = String.valueOf(System.currentTimeMillis());
    mFileName = time + ".jpg";
    Glide.with(ViewPagerActivity.this).load(filePath).asBitmap().diskCacheStrategy(DiskCacheStrategy.NONE)
            .skipMemoryCache(true)
            .into(new SimpleTarget<Bitmap>() {
                @Override
                public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                    if(null!=resource) {
                        mBitmap=resource;
                        new Thread(saveFileRunnable).start();
                    }
                }
            });
}
如上代码,在此方法中以当前时间毫秒值为图片名称,使用glide库加载图片获得bitmap对象,同时开启本地写入图片的子线程,如下:

/**
 * 开启子线程将图片保存到本地
 */
private Runnable saveFileRunnable = new Runnable() {
    @Override
    public void run() {
        try {
            saveFile(mBitmap, mFileName);
            mSaveMessage = "图片保存成功!";
            //通知系统图册更新
              Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            Uri uri = Uri.fromFile(myCaptureFile);
            intent.setData(uri);
            ViewPagerActivity.this.sendBroadcast(intent);
        } catch (IOException e) {
            mSaveMessage = "图片保存失败!";
            e.printStackTrace();
        }
        messageHandler.sendMessage(messageHandler.obtainMessage());
    }
};
在子线程中通过saveFile方法将图片储存到本地,如果保存成功将通知系统刷新系统图库以最快展示出刚下载的图片(此时可去系统图库中查看),不管成功或者失败都将相应的消息发送出去,以显示给用户。下面是保存图片的方法:

/**
 * 保存文件
 *
 * @param bm
 * @param fileName
 * @throws IOException
 */
public void saveFile(Bitmap bm, String fileName) throws IOException {
    dirFile = new File(ALBUM_PATH);
    if (!dirFile.exists()) {
        dirFile.mkdir();
    }
    myCaptureFile = new File(ALBUM_PATH + fileName);
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
    if (bm != null) {
        bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
    }
    bos.flush();
    bos.close();
}
先判断有没有文件,没有就创建一个,其中ALBUM_PATH,为图片文件夹,

private final static String ALBUM_PATH
        = Environment.getExternalStorageDirectory() + "/downloadpictures/";
然后用输出流将文件写入本地。

最后就是handler接收和处理消息:隐藏对话框,将收到的消息吐司给用户。

//展示子线程消息
private Handler messageHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        mSaveDialog.dismiss();
        Toast.makeText(ViewPagerActivity.this, mSaveMessage, Toast.LENGTH_SHORT).show();
    }
};
至此,图片保存本地以及可在系统相册时时查看就做完了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值