效果图:
MyActivity
package com.example.AndroidTest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.text.format.DateUtils;
import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import org.w3c.dom.Text;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Calendar;
import java.util.Date;
public class MyActivity extends Activity {
ImageView image;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
image = (ImageView) findViewById(R.id.image_to_save);
image.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(MyActivity.this);
builder.setItems(new String[]{getResources().getString(R.string.save_picture)}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
image.setDrawingCacheEnabled(true);
Bitmap imageBitmap = image.getDrawingCache();
if (imageBitmap != null) {
new SaveImageTask().execute(imageBitmap);
}
}
});
builder.show();
return true;
}
});
}
private class SaveImageTask extends AsyncTask<Bitmap, Void, String> {
@Override
protected String doInBackground(Bitmap... params) {
String result = getResources().getString(R.string.save_picture_failed);
try {
String sdcard = Environment.getExternalStorageDirectory().toString();
File file = new File(sdcard + "/Download");
if (!file.exists()) {
file.mkdirs();
}
File imageFile = new File(file.getAbsolutePath(),new Date().getTime()+".jpg");
FileOutputStream outStream = null;
outStream = new FileOutputStream(imageFile);
Bitmap image = params[0];
image.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
outStream.flush();
outStream.close();
result = getResources().getString(R.string.save_picture_success, file.getAbsolutePath());
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
protected void onPostExecute(String result) {
Toast.makeText(getApplicationContext(),result,Toast.LENGTH_SHORT).show();
image.setDrawingCacheEnabled(false);
}
}
}
记得加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
布局只是一个ImageView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:id="@+id/image_to_save"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/ic_launcher"
/>
</LinearLayout>
还有几个字符串
<string name="save_picture">保存图片</string>
<string name="save_picture_failed">保存失败</string>
<string name="save_picture_success">图片成功保存至%s目录</string>