首页 > 系统 > Android > 正文

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

2019-10-22 18:20:08
字体:
来源:转载
供稿:网友

工具类

之前用

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把图片保存到本地的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对VEVB武林网网站的支持!


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表