Android长按imageview把图片保存到本地
16lz
2021-01-23
rxjava版本:
compile 'io.reactivex:rxjava:1.1.5' compile 'io.reactivex:rxandroid:1.2.0'
示例代码:
public class MainActivity extends AppCompatActivity { private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.imageview); findViewById(R.id.btn_save).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { saveImageView(getViewBitmap(imageView)); } }); } private class SaveObservable implements Observable.OnSubscribe { private Bitmap drawingCache = null; public SaveObservable(Bitmap drawingCache) { this.drawingCache = drawingCache; } @Override public void call(Subscriber<? super String> subscriber) { if (drawingCache == null) { subscriber.onError(new NullPointerException("imageview的bitmap获取为null,请确认imageview显示图片了")); } else { try { File imageFile = new File(Environment.getExternalStorageDirectory(), "saveImageview.jpg"); FileOutputStream outStream; outStream = new FileOutputStream(imageFile); drawingCache.compress(Bitmap.CompressFormat.JPEG, 100, outStream); subscriber.onNext(Environment.getExternalStorageDirectory().getPath()); subscriber.onCompleted(); outStream.flush(); outStream.close(); } catch (IOException e) { subscriber.onError(e); } } } } private class SaveSubscriber extends Subscriber { @Override public void onCompleted() { Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_SHORT).show(); } @Override public void onError(Throwable e) { Log.i(getClass().getSimpleName(), e.toString()); Toast.makeText(getApplicationContext(), "保存失败——> " + e.toString(), Toast.LENGTH_SHORT).show(); } @Override public void onNext(String s) { Toast.makeText(getApplicationContext(), "保存路径为:--> " + s, Toast.LENGTH_SHORT).show(); } } private void saveImageView(Bitmap drawingCache) { Observable.create(new SaveObservable(drawingCache)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new SaveSubscriber()); } /** * 某些机型直接获取会为null,在这里处理一下防止国内某些机型返回null */ private Bitmap getViewBitmap(View view) { if (view == null) { return null; } Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); view.draw(canvas); return bitmap; }}
//不建议使用
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 { 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
保存图片 保存失败 图片成功保存至%s目录
代码中引用 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图片压缩 —— 2
- Android RadioButton 图片位置和大小
- android 相对布局例子代码
- Android 实现图片闪烁效果
- Android 调用相册或相机选择图片
- android各种图片获取路径的方式
- Android:获取网页源代码
- Android软键盘之代码改变软键盘状态
- android 用代码设置margin属性,textView加粗