仿微信上传图片

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"/>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值