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

工具类

之前用

AsyncTask

现在改用rxJava

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
<string name="save_picture" 保存图片</string
<string name="save_picture_failed" 保存失败</string
<string name="save_picture_success" 图片成功保存至%s目录</string

代码中引用

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