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

