美文网首页
android实现选择图片生成略缩图

android实现选择图片生成略缩图

作者: 夺命404 | 来源:发表于2019-10-12 11:05 被阅读0次

话不多说先上效果图

image.png

首先我们先分析布局: 下面的图片略缩图一看就想出来可以用RecycleView、GridView等等各种控件都可以实现。个人感觉还是用GridView比较简单些。

上代码 先上布局文件

整个xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:clipToPadding="true"
              android:fitsSystemWindows="true"
              android:orientation="vertical">

  <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">

                <LinearLayout
                        android:id="@+id/select_images"
                        android:padding="@dimen/sp_10"
                        android:layout_width="match_parent"
                        android:background="#FFFFFF"
                        android:orientation="horizontal"
                        android:layout_height="wrap_content">

                    <TextView
                            android:textColor="#000000"
                            android:textSize="@dimen/sp_16"
                            android:layout_width="wrap_content"
                            android:layout_weight="1"
                            android:layout_height="wrap_content"
                            android:text="图片"/>

                    <TextView
                            android:textColor="#000000"
                            android:textSize="@dimen/sp_16"
                            android:layout_width="wrap_content"
                            android:layout_weight="1"
                            android:layout_height="wrap_content"
                            android:text="已添加0"/>

                   <!-- 有个图标要替换下 -->
                    <TextView
                            android:textColor="#283643"
                            android:textSize="@dimen/sp_12"
                            android:layout_alignParentRight="true"
                            android:layout_width="wrap_content"
                            android:drawablePadding="@dimen/sp_10"
                            android:gravity="center"
                            android:layout_weight="1"
                            android:text=""
                            android:drawableRight="@drawable/more_iocn"
                            android:layout_height="wrap_content"/>
                </LinearLayout>

                <!-- 网格显示图片 行列间距5dp 每列宽度90dp -->
                <GridView
                        android:id="@+id/gridView1"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:background="@color/white"
                        android:horizontalSpacing="5dp"
                        android:verticalSpacing="5dp"
                        android:numColumns="5"
                        android:columnWidth="90dp"
                        android:gravity="center">
                </GridView>
            </LinearLayout>

 </LinearLayout>

每个item的xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="@dimen/sp_100"
        android:layout_height="@dimen/sp_100">

    <ImageView
            android:layout_margin="10dp"
            android:id="@+id/iv_img"
            android:scaleType="fitXY"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"/>

    <ImageView
            android:id="@+id/iv_delete"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_alignParentRight="true"
            android:src="@android:drawable/ic_delete"/>

</RelativeLayout>

MainActivity类

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    GridView gridView1; //网格显示缩略图
    LinearLayout selectImages;  // 选择图片

    private SimpleAdapter simpleAdapter;     //适配器
    public static final int REQUEST_CODE_SELECTED = 1004;  // 打开相册的请求码
    private List<HashMap<String, Object>> imageList = new ArrayList<HashMap<String, Object>>();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_leave);  // 这里填自己的布局文件名
        gridView1 = findViewById(R.id.gridView1);
        selectImages = findViewById(R.id.select_images);
         // GridView每项右上角删除图片点击事件
        gridView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                ImageView deleteImg = view.findViewById(R.id.iv_delete);
                deleteImg.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        imageList.remove(position);
                        simpleAdapter.notifyDataSetChanged();
                    }
                });
            }
        });
        selectImages.setOnClickListener(this);  // 选择图片点击事件
    }

    @Override
    public void onClick(View v) {
        // 动态获取权限
        if (ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {   //权限还没有授予,需要在这里写申请权限的代码
            // 第二个参数是一个字符串数组,里面是你需要申请的权限 可以设置申请多个权限
            // 最后一个参数是标志你这次申请的权限,该常量在onRequestPermissionsResult中使用到
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE_SELECTED);
        } else { //权限已经被授予,在这里直接写要执行的相应方法即可
            choosePhoto();
        }
    }

    private void choosePhoto() {
        Intent intentToPickPic = new Intent(Intent.ACTION_PICK, null);
        // 如果限制上传到服务器的图片类型时可以直接写如:"image/jpeg 、 image/png等的类型" 所有类型则写 "image/*"
        intentToPickPic.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/jpeg");
        startActivityForResult(intentToPickPic, REQUEST_CODE_SELECTED);
    }

    //当选择照片完成时会回调到onActivityResult
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            ArrayList<ImageItem> pickedImages = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);
            switch (requestCode) {
                case REQUEST_CODE_SELECTED: {
                    // 获取图片
                    try {
                        //该uri是上一个Activity返回的
                        Uri imageUri = data.getData();
                        if (imageUri != null) {
                            Bitmap bit = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
                            Log.i("bit", String.valueOf(bit));
                            simpleAdapter = new SimpleAdapter(this, imageList, R.layout.image_grid_item, new String[]{"iv_img"}, new int[]{R.id.iv_img});
                            simpleAdapter.setViewBinder(new SimpleAdapter.ViewBinder() {
                                @Override
                                public boolean setViewValue(View view, Object data, String textRepresentation) {

                                    if (view instanceof ImageView && data instanceof Bitmap) {
                                        ImageView i = (ImageView) view;
                                        i.setImageBitmap((Bitmap) data);
                                    }
                                    return true;
                                }
                            });
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    break;
                }
                default:
                    super.onActivityResult(requestCode, resultCode, data);
                    break;
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }

}

喜欢的话点个赞吧!

相关文章

  • android实现选择图片生成略缩图

    话不多说先上效果图 首先我们先分析布局: 下面的图片略缩图一看就想出来可以用RecycleView、GridVie...

  • Android OSS阿里图片上传

    一 、阿里的官方文档 阿里的官方文档 二、Android图片上传的流程 + OSS 选择图片 压缩图片 构建阿里上...

  • APICloud 写模块坑点记录-相册开发

    我最近写了一个图片选择的模块,里面包括拍照,选择图片,然后对图片进行压缩返回新压缩图片地址,只有android的,...

  • iOS 图片压缩方法

    图片压缩可以通过两种方式实现,压缩图片质量和压缩图片尺寸。如果对图片清晰度有要求的,可以先压缩图片质量,在压缩图片...

  • 前端实现图片裁剪和压缩

    前端实现图片的裁剪和压缩1、压缩图片drawImage,压缩图片长宽或者质量参数来实现压缩 2、图片base64转...

  • iOS 异步线程下载图片

    项目中有一处使用了第三方的图片服务器,当加载列表时,加载图片略缩图,点击略缩图后查看原图, 需求比较简单,就不使用...

  • TakePhoto 简介

    TakePhoto 是一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源...

  • 图形,文件处理

    一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库https://...

  • 一款用于在Android设备上获取照片(拍照或从相册、文件中选择

    一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库https://...

  • Vue 图片压缩并上传至服务器

    本文主要讲解基于 Vue + Vant ,实现移动端图片选择,并用 Canvas 压缩图片,最后上传至服务器。还会...

网友评论

      本文标题:android实现选择图片生成略缩图

      本文链接:https://www.haomeiwen.com/subject/brqqmctx.html