启动选择页面(第一个页面)处理代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
UtilLog.d("resultCode:" + resultCode);
switch (resultCode) {
case 1:
UtilLog.d("data:" + data);
if (data != null) {
//取得返回的Uri,基本上选择照片的时候返回的是以Uri形式,但是在拍照中有得机子呢Uri是空的,所以要特别注意
Uri mImageCaptureUri = data.getData();
//返回的Uri不为空时,那么图片信息数据都会在Uri中获得。如果为空,那么我们就进行下面的方式获取
if (mImageCaptureUri != null) {
Bitmap image;
try {
//这个方法是根据Uri获取Bitmap图片的静态方法
image = MediaStore.Images.Media.getBitmap(this.getContentResolver(), mImageCaptureUri);
if (image != null) {
savePicture(image, adapter.imageView);
}
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
//拍照处理
Bitmap image;
try {
image = BitmapFactory.decodeFile(getExternalCacheDir() + "/"+SelectPicPopupWindowActivity.TAKE_PHOTO_NAME);
if (image != null) {
savePicture(image, adapter.imageView);
}
} catch (Exception e) {
e.printStackTrace();
}
}
break;
default:
break;
}
}
/**
* 保存并返回的图片
*
* @param bitmap
* @param imageView
*/
private void savePicture(Bitmap bitmap, ImageView imageView) {
FileOutputStream b = null;
String str = DateFormat.format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ".jpg";
String name = null;
switch (adapter.clickPosition) {
case 0:
name = "1001_" + str;
break;
case 1:
name = "1002_" + str;
break;
case 2:
name = "1003_" + str;
break;
case 3:
name = "1004_" + str;
break;
case 4:
name = "1005_" + str;
break;
}
String fileName = getCacheDir() + name;
boolean bl = false;
try {
b = new FileOutputStream(fileName);
bl = bitmap.compress(Bitmap.CompressFormat.JPEG, 10, b);// 把数据写入文件
if (bl) {
adapter.addUrl(fileName, adapter.clickPosition);//添加需要上传图片的链接
UtilLog.d("bl:" + bl);
UtilLog.d("fileName:" + fileName);
Glide.with(this)
.load(fileName)
// .placeholder(R.drawable.anim)
// .bitmapTransform(new RoundedCornersTransformation(this, 50, 0, RoundedCornersTransformation.CornerType.ALL))
.crossFade(1000)
.into(imageView);
UtilLog.d("xianshiwangcheng");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
b.flush();
b.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
仿ios的选择页面
import java.io.File;
import android.Manifest;
import android.app.Activity;
import android.app.Dialog;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
public class SelectPicPopupWindowActivity extends Activity implements OnClickListener {
private static final int OPNE_CAMRA=0;
//调用相机拍照,保存照片的名字
public static final String TAKE_PHOTO_NAME = "take_photo.jpg";
private Button btn_take_photo, btn_pick_photo, btn_cancel;
private LinearLayout layout;
private Intent intent;
public static String url;
private int sign=1;//是否弹出横向拍照的提示,0不弹出,1弹出
//下面这句指定调用相机拍照后的照片存储的路径
File tempFile = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_select_pic_popup_window);
// File dirFile = new File(getExternalCacheDir());
// if (!dirFile.exists()) {
// dirFile.mkdirs();
// }
tempFile = new File(getExternalCacheDir(), TAKE_PHOTO_NAME);
intent = getIntent();
sign=intent.getIntExtra("sign",1);
btn_take_photo = (Button) this.findViewById(R.id.btn_take_photo);//照相
btn_pick_photo = (Button) this.findViewById(R.id.btn_pick_photo);//相册
btn_cancel = (Button) this.findViewById(R.id.btn_cancel);
layout = (LinearLayout) findViewById(R.id.pop_layout);
// 添加选择窗口范围监听可以优先获取触点,即不再执行onTouchEvent()函数,点击其他地方时执行onTouchEvent()函数销毁Activity
layout.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "提示:点击窗口外部关闭窗口!",
Toast.LENGTH_SHORT).show();
}
});
// 添加按钮监听
btn_cancel.setOnClickListener(this);
btn_pick_photo.setOnClickListener(this);
btn_take_photo.setOnClickListener(this);
}
// 实现onTouchEvent触屏函数但点击屏幕时销毁本Activity
@Override
public boolean onTouchEvent(MotionEvent event) {
finish();
return true;
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_take_photo:
try {
if (RenZhengListViewAdapter.isFirstTakePhono&&sign!=0) {
RenZhengListViewAdapter.isFirstTakePhono = false;
UtilDialog.showTakePhotoDialog(this, new DialogButtonClickInterface() {
@Override
public void leftButtonClick(Dialog dialog) {
}
@Override
public void rightButtonClick(Dialog dialog) {
}
@Override
public void singleButtonClick(Dialog dialog) {
if (Build.VERSION.SDK_INT >= 23) {
int checkCallPhonePermission = ContextCompat.checkSelfPermission(SelectPicPopupWindowActivity.this, Manifest.permission.CAMERA);
if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(SelectPicPopupWindowActivity.this,new String[]{Manifest.permission.CAMERA},OPNE_CAMRA);
return;
}else{
openCamra();//调用具体方法
}
} else {
openCamra();//调用具体方法
}
}
});
} else {
if (Build.VERSION.SDK_INT >= 23) {
int checkCallPhonePermission = ContextCompat.checkSelfPermission(SelectPicPopupWindowActivity.this, Manifest.permission.CAMERA);
if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(SelectPicPopupWindowActivity.this,new String[]{Manifest.permission.CAMERA},OPNE_CAMRA);
return;
}else{
openCamra();//调用具体方法
}
} else {
openCamra();//调用具体方法
}
}
} catch (Exception e) {
e.printStackTrace();
}
break;
case R.id.btn_pick_photo:
try {
//选择照片的时候也一样,我们用Action为Intent.ACTION_GET_CONTENT,
//有些人使用其他的Action但我发现在有些机子中会出问题,所以优先选择这个
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, 2);
} catch (ActivityNotFoundException e) {
}
break;
case R.id.btn_cancel:
finish();
break;
default:
break;
}
}
private void openCamra(){
//拍照我们用Action为MediaStore.ACTION_IMAGE_CAPTURE,
//有些人使用其他的Action但我发现在有些机子中会出问题,所以优先选择这个
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
return;
}
switch (requestCode) {
// 如果是调用相机拍照时
case 1:
url = tempFile.getPath();
setResult(1, data);
finish();
break;
// 如果是直接从相册获取
case 2:
if (data != null)
setResult(1, data);
finish();
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
//就像onActivityResult一样这个地方就是判断你是从哪来的。
case OPNE_CAMRA:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
openCamra();
} else {
// Permission Denied
UtilToast.showToast(SelectPicPopupWindowActivity.this,"很遗憾您把相机权限禁用了,不能拍照上传",0);
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
上传照片
private void uploadImage() {
uploadDialog = UtilDialog.showUploadDialog(UploadImageActivity.this, new DialogUploadInterface() {
@Override
public void setTextView(TextView textView) {
progressTv = textView;
}
});
Map<String ,File> map=new HashMap<>();
for (int i=0;i<images.size()-1;i++){
File file = new File(images.get(i).getFileURL());
map.put(i+".jpg",file);
}
String token= UtilSharedPreferences.readData(UploadImageActivity.this,"token","token").toString();
OkHttpUtils
.post()
.url(uploadUrl)
.addHeader("token",token)
.addParams("category",applyTradeList.get(groupPosition).getFiles().get(childPosition).getCategory())
.addParams("objectId",applyTradeList.get(groupPosition).getTradeBillId())
.addParams("objectName","trade_bill")
.files("files",map)
.build()
.execute(new StringCallback() {
@Override
public void onError(Call call, Exception e, int id) {
UtilLog.d("e:"+e.toString());
uploadDialog.dismiss();
UtilToast.showToast(UploadImageActivity.this, "上传失败请重试", 0);
}
@Override
public void onResponse(String response, int id) {
UtilLog.d("response:"+response);
uploadDialog.dismiss();
JSONObject jsonObject = JSONObject.parseObject(response);
String success = jsonObject.getString("success");
boolean bl = Boolean.parseBoolean(success);
if (bl){
UtilDialog.showSingleButtonNoTitleDialog(mContext, "上传成功", "确认", new DialogButtonClickInterface() {
@Override
public void leftButtonClick(Dialog dialog) {
}
@Override
public void rightButtonClick(Dialog dialog) {
}
@Override
public void singleButtonClick(Dialog dialog) {
dialog.dismiss();
UploadImageActivity.this.finish();
}
});
}else {
UtilToast.showToast(UploadImageActivity.this, "上传失败请重试", 0);
}
}
@Override
public void inProgress(float progress, long total, int id) {
super.inProgress(progress, total, id);
UtilLog.d("progress:"+progress);
int mProgress = (int) (progress * 100);
progressTv.setText("正在上传 " + mProgress + "%");
}
});
}