public class GridViewAdapter extends BaseAdapter { private Context context; private List<MyBitmapData> list; public GridViewAdapter(Context context, List<MyBitmapData> list) { this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = View.inflate(context, R.layout.imageitem, null); ImageView iv = view.findViewById(R.id.iv); iv.setImageBitmap(list.get(position).getBitmap()); return view; }
}
public class MyBitmapData { private Bitmap bitmap; public MyBitmapData(Bitmap bitmap) { this.bitmap = bitmap; } public Bitmap getBitmap() { return bitmap; } public void setBitmap(Bitmap bitmap) { this.bitmap = bitmap; } @Override public String toString() { return "MyBitmapData{" + "bitmap=" + bitmap + '}'; } }
public class MainActivity extends AppCompatActivity { private GridView gv1; private Button bt; private List<MyBitmapData> list = new ArrayList<>(); private GridViewAdapter adapter; private static final int PZ=15; private static final int BD=16; private File outputImage; private Uri imageUri; private ArrayList<String> db; private Bitmap bitmap; private boolean boolea=true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); bitmap = BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.zj); list.add(new MyBitmapData(bitmap)); adapter = new GridViewAdapter(MainActivity.this,list); gv1.setAdapter(adapter); gv1.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (list.size()==(position+1)){ if (list.size()!=6){ MyNewDialog(); }else { if (boolea==true){ list.remove(list.get(list.size()-1)); adapter.notifyDataSetChanged(); list.add(new MyBitmapData(bitmap)); boolea=false; }else { MyNewDialog(); boolea=true; } } }else { if (list.size()>=6){ if (boolea==true){ list.remove(list.get(position)); list.add(new MyBitmapData(bitmap)); adapter.notifyDataSetChanged(); boolea=false; }else { list.remove(list.get(position)); adapter.notifyDataSetChanged(); boolea=true; } }else { // 当点击的item不是最后一个时 list.remove(list.get(position)); adapter.notifyDataSetChanged(); } } } }); } private void MyNewDialog(){ LayoutInflater factory = LayoutInflater.from(MainActivity.this); View myView = factory.inflate(R.layout.dialog,null); Button bt1 = myView.findViewById(R.id.bt1); Button bt2 = myView.findViewById(R.id.bt2); Button bt3 = myView.findViewById(R.id.bt3); myView.setPadding(0, 0, 0, 0); final Dialog dialog = new AlertDialog.Builder(MainActivity.this, R.style.Dialog_FS).setView(myView).create(); dialog.setCanceledOnTouchOutside(true); dialog.show(); Window window = dialog.getWindow(); window.setGravity(Gravity.BOTTOM); WindowManager m = getWindowManager(); Display d = m.getDefaultDisplay(); //为获取屏幕宽、高 WindowManager.LayoutParams p = dialog.getWindow().getAttributes(); //获取对话框当前的参数值 p.width = d.getWidth(); //宽度设置为屏幕 dialog.getWindow().setAttributes(p); //设置生效 // 拍照 bt1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){ //表示未授权时 //进行授权 ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CAMERA},1); }else{ dialog.dismiss(); //创建File对象,用于存储拍摄的照片 Intent intent = xaingji (); startActivityForResult(intent,PZ); } } }); // 本地 bt2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ //表示未授权时 //进行授权 ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},2); }else{ dialog.dismiss(); // ImageConfig config = new ImageConfig(); // config.minHeight = 400; // config.minWidth = 400; // config.mimeType = new String[]{"image/jpeg", "image/png"}; // 图片类型 image/gif ... // config.minSize = 1 * 1024 * 1024; // 1Mb 图片大小 PhotoPickerIntent intent = new PhotoPickerIntent(MainActivity.this); intent.setSelectModel(SelectModel.MULTI); intent.setShowCarema(false); // 是否显示拍照, 默认false intent.setMaxTotal(7-list.size()); // 最多选择照片数量,默认为9 // intent.setSelectedPaths(db); // 已选中的照片地址, 用于回显选中状态 // intent.setImageConfig(config); startActivityForResult(intent, BD); // Intent intent1=new Intent(Intent.ACTION_PICK,null); // intent1.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); // startActivityForResult(intent1,BD); } } }); // 取消 bt3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); } // 启用系统相机 private Intent xaingji() { //创建File对象,用于存储拍摄的照片 outputImage = new File(getExternalCacheDir(),"name_image.jpg"); try { if (outputImage.exists()){ outputImage.delete(); } outputImage.createNewFile(); } catch (IOException e) { e.printStackTrace(); } if (Build.VERSION.SDK_INT >= 24){ imageUri = FileProvider.getUriForFile(MainActivity.this,"com.athis.app.acase.provider",outputImage); }else { imageUri = Uri.fromFile(outputImage); } //启动相机 Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri); return intent; } @Override protected void onResume() { super.onResume(); if (list.size()>0){ if (list.size()>6){ list.remove(list.size()-1); } adapter.notifyDataSetChanged(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if((requestCode==BD && resultCode==RESULT_OK)&&data!=null) { db = data.getStringArrayListExtra(PhotoPickerActivity.EXTRA_RESULT); for (int i=0;i<db.size();i++){ Bitmap image = BitmapFactory.decodeFile(db.get(i)); Bitmap bm = Bitmap.createScaledBitmap(image, 480, 480, true); list.add(0,new MyBitmapData(bm)); } } if (requestCode == PZ && resultCode == RESULT_OK) { Bitmap db = BitmapFactory.decodeFile(outputImage.getAbsolutePath()); Bitmap bm = Bitmap.createScaledBitmap(db, 480, 480, true); db.recycle(); list.add(0,new MyBitmapData(bm)); } } // 权限再次提示 @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode==2){ if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { PhotoPickerIntent intent = new PhotoPickerIntent(MainActivity.this); intent.setSelectModel(SelectModel.MULTI); intent.setShowCarema(false); // 是否显示拍照, 默认false intent.setMaxTotal(7-list.size()); // 最多选择照片数量,默认为6 // intent.setSelectedPaths(db); // 已选中的照片地址, 用于回显选中状态 // intent.setImageConfig(config); startActivityForResult(intent, BD); } else { // Permission Denied Toast.makeText(MainActivity.this, "请到本机设置,手动打开本APP存储权限", Toast.LENGTH_SHORT).show(); } return; } if (requestCode==1){ if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { Intent intent = xaingji (); startActivityForResult(intent,PZ); } else { Toast.makeText(MainActivity.this, "请到本机设置,手动打开本APP相机权限", Toast.LENGTH_SHORT).show(); } return; } super.onRequestPermissionsResult(requestCode, permissions, grantResults); } private void initView() { gv1 = (GridView)findViewById(R.id.gv1); bt = (Button)findViewById(R.id.bt); } }//加入
compile 'com.foamtrace:photopicker:1.0'
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.FLASHLIGHT" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<activity android:name="com.foamtrace.photopicker.PhotoPickerActivity" android:theme="@style/PhotoPickerTheme" android:screenOrientation="portrait" android:configChanges="orientation|screenSize"/> <activity android:name="com.foamtrace.photopicker.PhotoPreviewActivity" android:screenOrientation="portrait" android:theme="@style/PhotoPickerTheme"/>