Android長按imageview把圖片保存到本地的實例代碼
工具類
之前用
AsyncTask
現(xiàn)在改用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; } });
總結(jié)
以上所述是小編給大家介紹的Android長按imageview把圖片保存到本地的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Android開發(fā)入門環(huán)境快速搭建實戰(zhàn)教程
最近想重新學習下Android,學習之前開發(fā)環(huán)境的搭建是個首先要解決的問題,所以下面這篇文章主要給大家介紹了Android開發(fā)環(huán)境搭建的相關(guān)資料,文中將實現(xiàn)的步驟一步步介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧。2017-11-11Android獲取SDcard目錄及創(chuàng)建文件夾的方法
今天小編就為大家分享一篇Android獲取SDcard目錄及創(chuàng)建文件夾的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08android在異步任務(wù)中關(guān)閉Cursor的代碼方法
android在異步任務(wù)中如何關(guān)閉Cursor?在我們開發(fā)應(yīng)用的時候,很多時候會遇到這種問題,下面我們就看看代碼如何實現(xiàn)2013-11-11Android實現(xiàn)語音數(shù)據(jù)實時采集、播放
這篇文章主要介紹了android實現(xiàn)語音數(shù)據(jù)實時采集、播放的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12Android Flutter基于WebSocket實現(xiàn)即時通訊功能
WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議。本文將利用Flutter WebSocket實現(xiàn)即時通訊功能,文中示例代碼講解詳細,感興趣的可以了解一下2022-03-03Android高級組件ImageSwitcher圖像切換器使用方法詳解
這篇文章主要為大家詳細介紹了Android高級組件ImageSwitcher圖像切換器的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12Android開發(fā)實現(xiàn)橫向列表GridView橫向滾動的方法【附源碼下載】
這篇文章主要介紹了Android開發(fā)實現(xiàn)橫向列表GridView橫向滾動的方法,結(jié)合實例形式分析了Android橫向列表GridView實現(xiàn)橫向滾動的相關(guān)布局與功能實現(xiàn)技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下2018-01-01