Android长按imageview把图片保存到本地的实例代码

作者:NotesChapter 时间:2021-07-23 14:20:38 

工具类

之前用

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

标签:android,imageview,长按,保存
0
投稿

猜你喜欢

  • java 线程中start方法与run方法的区别详细介绍

    2023-08-23 20:41:31
  • Java类加载机制实现流程及原理详解

    2022-05-26 02:53:24
  • C#随机生成Unicode类型字符串

    2023-12-05 08:42:29
  • C#用记事本编写简单WinForm窗体程序

    2021-12-19 13:02:31
  • springboot 整合 sa-token简介及入门教程

    2023-03-24 01:10:45
  • idea切换分支的时候,忽略一些无用的修改设置

    2022-01-10 04:13:37
  • IDEA高效使用设置指南

    2023-10-30 01:39:37
  • Java多线程开发工具之CompletableFuture的应用详解

    2023-08-30 00:43:00
  • Java语言中4种内部类的超详细讲解

    2022-02-23 18:08:10
  • Flutter开发setState能否在build中直接调用详解

    2022-05-17 14:55:27
  • Java Annotation(Java 注解)的实现代码

    2023-01-09 00:36:17
  • android的消息处理机制(图文+源码分析)—Looper/Handler/Message

    2023-01-04 08:04:15
  • java property配置文件管理工具框架过程详解

    2023-10-12 04:35:50
  • 详解Android中Notification通知提醒

    2023-09-10 09:57:19
  • Android开发之获取短信验证码后按钮背景变化并且出现倒计时

    2022-12-21 10:09:40
  • springboot整合security和vue的实践

    2021-09-17 20:39:28
  • 基于list stream: reduce的使用实例

    2021-07-21 06:54:52
  • Android实现图片转高斯模糊以及高斯模糊布局

    2023-10-20 16:10:23
  • Springcloud-nacos实现配置和注册中心的方法

    2023-06-15 13:46:42
  • Java ByteBuffer网络编程用法实例解析

    2022-09-17 20:16:22
  • asp之家 软件编程 m.aspxhome.com