相关博客:
http://blog.csdn.net/zhaihaohao1/article/details/41544087
http://blog.csdn.net/zhaihaohao1/article/details/41724763
项目结构:
核心代码:
activity_main.xml中
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="拍照"
android:onClick="btn_onclick_camera"
/>
<ImageView
android:id="@+id/imageView1"
android:layout_width="50dp"
android:layout_height="50dp"
/>
</LinearLayout>
dialog_photo_entry.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/large_image "
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY" >
</ImageView>
</LinearLayout>
MainActivity中
public class MainActivity extends Activity {
private ImageView imageView1;
String picturePath = null;
File outFile = null;
final Map<String, String> params_image = new HashMap<String, String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView1 = (ImageView) findViewById(R.id.imageView1);
}
/**
* 拍照按钮,点击事件
*
*/
public void btn_onclick_camera(View v) {
setView();
}
/**
* 拍照或从相册拿照片
*/
public void setView() {
final AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.this);
String[] strs = { "拍照上传", "相册选取", "取消" };
builder.setItems(strs, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
Intent camera = new Intent(
"android.media.action.IMAGE_CAPTURE");
startActivityForResult(camera, 1);
break;
case 1:
Intent picture = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(picture, 2);
break;
case 2:
Toast.makeText(MainActivity.this, "关闭对话框", 10).show();
break;
}
}
});
builder.setCancelable(false);
builder.create().show();
}
/**
* 1取出拍照的结果存储到手机内存则pictures文件夹, 再从文件加下取出展示到界面,并且点击放大
* 2从相册中取出图片,压缩,放到dialog中,然后去出展示到界面 点击放大。
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap bitmap = null;
File outDir = null;
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
// 这个路径,在手机内存下创建一个pictures的文件夹,把图片存在其中。
outDir = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
} else {
if (MainActivity.this != null) {
outDir = this.getFilesDir();
}
}
if (!outDir.exists()) {
outDir.mkdirs();
}
if (requestCode == 1 && resultCode == Activity.RESULT_OK) {
if (data != null) {
// 直接获取照片,data是系统默认的(在系统中已经压缩过图片取出来就行了);
bitmap = (Bitmap) data.getExtras().get("data");
if (bitmap != null) {
showImageDialog(bitmap, "1", "陕A12345");
} else {
Toast.makeText(MainActivity.this, "图片获取失败,请重新选择", 10)
.show();
}
// 保存图片
try {
outFile = new File(outDir, System.currentTimeMillis()
+ ".jpg");
FileOutputStream fos = new FileOutputStream(outFile);
boolean flag = bitmap.compress(Bitmap.CompressFormat.JPEG,
100, fos);// 把数据写入文件
Log.i("1", "flag=" + flag);
if (flag) {
Toast.makeText(MainActivity.this,
"图片已保存至:" + outFile.getAbsolutePath(), 10)
.show();
// 展示图片,点击放大
String pathname = outFile.getAbsolutePath();// 绝对路径
final Bitmap myBitmap = BitmapFactory
.decodeFile(pathname);
imageView1.setImageBitmap(bitmap);
imageView1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getBigPicture(myBitmap);// 点击放大
}
});
} else {
Toast.makeText(MainActivity.this, "图片保存失败!", 10).show();
}
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
}
}// 相册显示界面
else if (requestCode == 2 && data != null
&& resultCode == Activity.RESULT_OK) {
try {
Uri selectedImage = data.getData();
String[] filePathColumns = { MediaStore.Images.Media.DATA };
Cursor c = MainActivity.this.getContentResolver().query(
selectedImage, filePathColumns, null, null, null);
c.moveToFirst();
int columnIndex = c.getColumnIndex(filePathColumns[0]);
picturePath = c.getString(columnIndex);// 取出图片路径
Log.e("1", "图片路径" + picturePath);
c.close();
// 调用压缩方法压缩图片
bitmap = createThumbnail(picturePath, 10);
// 保存图片到pictures文件夹下,上传的时候还要上传outFile
outFile = new File(outDir, System.currentTimeMillis() +
".jpg");
FileOutputStream fos = new FileOutputStream(outFile);
boolean flag = bitmap.compress(Bitmap.CompressFormat.JPEG,
100,
fos);// 把数据写入文件
if (bitmap != null) {
// 选择图片后显示在对话框内
showImageDialog(bitmap, "1", "陕A12345");
}
// 展示图片并点击放大
String pathname = outFile.getAbsolutePath();//绝对路径
final Bitmap myBitmap = BitmapFactory.decodeFile(pathname);
imageView1.setImageBitmap(myBitmap);
imageView1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getBigPicture(myBitmap);
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
/**
*
* 展示图片的dialog
*/
private void showImageDialog(Bitmap b, final String orderNo,
final String chepaihao) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("请上传包含车牌的清晰照片");
View imgEntryView = View.inflate(MainActivity.this,
R.layout.dialog_photo_entry, null); // 加载自定义的布局文件
ImageView img = (ImageView) imgEntryView.findViewById(R.id.large_image);
if (b != null) {
Display display = MainActivity.this.getWindowManager()
.getDefaultDisplay();
int scaleWidth = display.getWidth();
int height = b.getHeight();// 图片的真实高度
int width = b.getWidth();// 图片的真实宽度
LayoutParams lp = (LayoutParams) img.getLayoutParams();
lp.width = scaleWidth;// 调整宽度
lp.height = (height * scaleWidth) / width;// 调整高度
img.setLayoutParams(lp);
img.setImageBitmap(b);
} else {
Toast.makeText(MainActivity.this, "获取照片失败", 10).show();
img.setVisibility(View.GONE);
}
builder.setView(imgEntryView); // 自定义dialog
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (MainActivity.this != null) {
// 判断网络
if (isNetworkConnected(MainActivity.this)) {
try {
/**
* 上传照片,没有正确的参数不能正确上传
*
*/
String str_uploadImage = UploadFileUtil
.uploadImage(
MainActivity.this,
RequestUrl.upload,
params_image,
outFile);
} catch (Exception e) {
e.printStackTrace();
}
} else {
Toast.makeText(MainActivity.this, "网络异常,请检查网络!", 10)
.show();
}
}
}
});
builder.setNegativeButton("取消", null);
builder.create().show();
}
/**
* 压缩图片
*
*
*/
private Bitmap createThumbnail(String filepath, int i) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = i;
return BitmapFactory.decodeFile(filepath, options);
}
/**
* 判断网络是否正常
*
*
*/
public boolean isNetworkConnected(Context context) {
if (context == null) {
return false;
}
ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo == null) {
return false;
} else {
return true;
}
}
/**
* 点击图片放大查看
*
*/
private void getBigPicture(Bitmap b) {
LayoutInflater inflater = LayoutInflater.from(this);
View imgEntryView = inflater.inflate(R.layout.dialog_photo_entry, null); // 加载自定义的布局文件
final AlertDialog dialog = new AlertDialog.Builder(this).create();
ImageView img = (ImageView) imgEntryView.findViewById(R.id.large_image);
if (b != null) {
Display display = MainActivity.this.getWindowManager()
.getDefaultDisplay();
int scaleWidth = display.getWidth();
int height = b.getHeight();// 图片的真实高度
int width = b.getWidth();// 图片的真实宽度
LayoutParams lp = (LayoutParams) img.getLayoutParams();
lp.width = scaleWidth;// 调整宽度
lp.height = (height * scaleWidth) / width;// 调整高度
img.setLayoutParams(lp);
img.setImageBitmap(b);
dialog.setView(imgEntryView); // 自定义dialog
dialog.show();
}
// 点击布局文件(也可以理解为点击大图)后关闭dialog,这里的dialog不需要按钮
imgEntryView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View paramView) {
if (dialog.isShowing()) {
dialog.cancel();
}
}
});
}
}// class
主清单中要配的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
如果没有明白下载我的例子
http://download.csdn.net/detail/zhaihaohao1/8383861