Android长按imageview把图片保存到本地的实例代码
作者:NotesChapter 发布时间:2021-07-23 14:20:38
标签:android,imageview,长按,保存
工具类
之前用
AsyncTask
现在改用rxJava
public class SaveImageUtils {
public static void imageSave(final ImageView imageView, final int id) {
Observable
.create(new Observable.OnSubscribe<ImageView>() {
@Override
public void call(Subscriber<? super ImageView> sub) {
sub.onNext(imageView);
}
}
).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new MySubscriber<ImageView>() {
@Override
public void onNext(ImageView imageView) {
File imageFile = new File(ActivityUtils.ImagePath(), id + ".jpg");
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream(imageFile);
Bitmap image = imageView.getDrawingCache();
image.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
outStream.flush();
outStream.close();
Toast.makeText(UIUtils.getContext(), UIUtils.getString(R.string.save_picture_success), Toast.LENGTH_LONG).show();
} catch (IOException e) {
e.printStackTrace();
onError(e);
}
}
@Override
public void onError(Throwable e) {
Toast.makeText(UIUtils.getContext(), UIUtils.getString(R.string.save_picture_failed), Toast.LENGTH_LONG).show();
}
});
}
}
MySubscriber
public class MySubscriber<T> extends Subscriber<T> {
@Override
public void onStart() {
super.onStart();
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(T t) {
}
}
//不建议使用了
package com.app.mly.utils;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Environment;
import android.widget.ImageView;
import android.widget.Toast;
import com.fengche.android.mly.R;
import java.io.File;
import java.io.FileOutputStream;
/**
* Created by y on 2016/1/14.
*/
public class SaveImageUtils extends AsyncTask<Bitmap, Void, String> {
Activity mActivity;
ImageView mImageView;
public SaveImageUtils(Activity activity, ImageView imageView) {
this.mImageView = imageView;
this.mActivity = activity;
}
@Override
protected String doInBackground(Bitmap... params) {
String result = mActivity.getResources().getString(R.string.save_picture_failed);
try {
String sdcard = Environment.getExternalStorageDirectory().toString();
File file = new File(sdcard + "/123");
if (!file.exists()) {
file.mkdirs();
}
File imageFile = new File(file.getAbsolutePath(), "命名" + ".jpg");
FileOutputStream outStream = null;
outStream = new FileOutputStream(imageFile);
Bitmap image = params[0];
image.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
outStream.flush();
outStream.close();
result = mActivity.getResources().getString(R.string.save_picture_success, file.getAbsolutePath());
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
protected void onPostExecute(String result) {
Toast.makeText(mActivity, result, Toast.LENGTH_SHORT).show();
mImageView.setDrawingCacheEnabled(false);
}
}
stirng文件下需要的几个toast
<string name="save_picture">保存图片</string>
<string name="save_picture_failed">保存失败</string>
<string name="save_picture_success">图片成功保存至%s目录</string>
代码中引用
mScanCode.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(ShareActivity.this);
builder.setItems(new String[]{getResources().getString(R.string.save_picture)}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mScanCode.setDrawingCacheEnabled(true);
Bitmap imageBitmap = mScanCode.getDrawingCache();
if (imageBitmap != null) {
new SaveImageUtils(ShareActivity.this, mScanCode).execute(imageBitmap);
}
}
});
builder.show();
return true;
}
});
总结
以上所述是小编给大家介绍的Android长按imageview把图片保存到本地的实例代码网站的支持!
来源:http://blog.csdn.net/NotesChapter/article/details/53188366
0
投稿
猜你喜欢
- 前面的文章使用sharding-jdbc实现水平分表中详细记录了如何使用sharding-jdbc实现水平分表,即根据相应的策略,将一部分数
- 前言:在java开发中我们肯定会大量的使用集合,在这里我将总结常见的集合类,每个集合类的优点和缺点,以便我们能更好的使用集合。下面我用一幅图
- 经典的Java基础面试题集锦,欢迎收藏和分享。问题:如果main方法被声明为private会怎样?答案:能正常编译,但运行的时候会提示”ma
- 实现如下边框效果:虚线画效果,可以使用Android中的xml来做。下面话不多说,直接上代码:<RelativeLayout &nbs
- 已知一副扑克牌有54张,去除大王和小王,剩余52张。在其中随机抽取4张牌,利用加减乘除进行计算得到24. 从A到10,他们的值分别为1到10
- 前言虽然Android程序是使用Java语言开发的,当然,现在也可以使用kotlin语言。但是实际上我们开发出来的Android程序并不能运
- 首先微信公众号开发网页授权登录使用环境:开发工具:eclipse;服务器:tomcat8,开发语言:JAVA。我写的网页授权登录时用开发者模
- @EventListener 异步中使用condition的问题@EventListener是spring在4.2+推出的更好的使用spri
- 序列化与反序列化是.net程序设计中常见的应用,本文即以实例展示了.net实现序列化与反序列化的方法。具体如下:一般来说,.net中的序列化
- 当键盘敲下后退键(Backspace)后1、禁止浏览器自动后退2、但不影响密码、单行文本、多行文本输入框等的回退操作<script t
- 一致性哈希节点的增加和减少,大部分节点的 Hash一致package consistenthashimport ("hash/cr
- 使用后台返回验证码图片,验证码存到session中后端实现校验,前端只展示验证码图片。本篇用SpringBoot Thymeleaf实现验证
- 目录引言API介绍1、Optional(),empty(),of(),ofNullable()2、orElse(),orElseGet()和
- 现在很多app的首页都有一个倒计时控件,比如说3秒或者5秒自动跳转界面,或者点击控件直接跳过首先,自定义控件CircleProgressba
- 本文实例为大家分享了C#重写DataGridView的实例代码,供大家参考,具体内容如下using System;using S
- 发生服务器 500 异常,如果默认方式处理,则是将异常捕获之后跳到 Tomcat 缺省的异常页面,如下图所示。不论哪个网站都是一样的,所以为
- 本文介绍了Android中js和原生交互的示例代码,分享给大家,具体如下:加载webview的类public class MainActiv
- 由于IDEA版本更新,在新建工程的时候找不到Static Web,而且在插件里也找不到,没法下载。如图:没有Static Web新建项目的方
- 1.依赖maven依赖如下,需要说明的是,spring-boot-starter-data-redis里默认是使用lettuce作为redi
- 1. 什么是 spring-boot-devtoolsspring-boot-devtools 是 spring-boot项目开发时的一个热