Android----从相册选取图片

作者: pgydbh | 来源:发表于2018-08-12 13:04 被阅读13次

    导入包名

    implementation 'com.github.bumptech.glide:glide:3.8.0'
    

    相册布局

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_height="match_parent">
    
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:id="@+id/header"
            android:fitsSystemWindows="true"
            android:background="@color/colorPrimary"
            android:layout_height="?attr/actionBarSize">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:text="选择相册"
                android:layout_alignParentBottom="true"
                android:gravity="center"
                android:textColor="@color/white"
                android:textSize="17sp"
                android:id="@+id/txt_toname"/>
            <ImageButton
                android:layout_width="50dp"
                android:layout_height="?attr/actionBarSize"
                android:scaleType="fitCenter"
                android:id="@+id/btn_back"
                android:layout_alignParentBottom="true"
                android:background="@color/transparent"
                android:src="@drawable/backer"
                android:padding="18dp"/>
        </RelativeLayout>
        <ListView
            android:layout_width="match_parent"
            android:id="@+id/lst"
            android:scrollbars="none"
            android:layout_height="match_parent">
    
        </ListView>
    
        <ViewStub
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout="@layout/loading"
            android:id="@+id/loading"/>
    </LinearLayout>
    

    相册条目布局

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="match_parent"
        android:layout_height="100dp">
        <ImageView
            android:layout_width="94dp"
            android:layout_margin="3dp"
            android:layout_height="94dp"
            android:src="@mipmap/ic_launcher"
            android:scaleType="centerCrop"
            android:id="@+id/img"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:textColor="@color/colorPrimary"
            android:layout_toRightOf="@id/img"
            android:textSize="15sp"
            android:paddingTop="15dp"
            android:paddingLeft="10dp"
            android:gravity="center_vertical"
            android:id="@+id/path"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:textColor="@color/colorPrimary"
            android:textSize="13sp"
            android:paddingBottom="15dp"
            android:paddingLeft="10dp"
            android:layout_toRightOf="@id/img"
            android:layout_below="@id/path"
            android:gravity="center_vertical"
            android:id="@+id/size"/>
    </RelativeLayout>
    

    图片页面

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout android:layout_height="match_parent"
        android:layout_width="match_parent"
        xmlns:android="http://schemas.android.com/apk/res/android" >
    
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:id="@+id/header"
            android:fitsSystemWindows="true"
            android:background="@color/colorPrimary"
            android:layout_height="?attr/actionBarSize">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:text="选择图片"
                android:layout_alignParentBottom="true"
                android:gravity="center"
                android:textColor="@color/white"
                android:textSize="17sp"
                android:id="@+id/txt_toname"/>
            <ImageButton
                android:layout_width="50dp"
                android:layout_height="?attr/actionBarSize"
                android:scaleType="fitCenter"
                android:id="@+id/btn_back"
                android:layout_alignParentBottom="true"
                android:background="@color/transparent"
                android:src="@drawable/backer"
                android:padding="18dp"/>
        </RelativeLayout>
    
    
        <GridView
            android:layout_width="match_parent"
            android:id="@+id/grid"
            android:numColumns="4"
            android:scrollbars="none"
            android:layout_below="@id/header"
            android:layout_height="match_parent">
    
        </GridView>
    </RelativeLayout>
    

    图片条目布局

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="match_parent"
        android:layout_height="100dp">
        <ImageView
            android:layout_width="match_parent"
            android:layout_margin="3dp"
            android:layout_height="match_parent"
            android:src="@mipmap/ic_launcher"
            android:scaleType="centerCrop"
            android:id="@+id/img"/>
    </LinearLayout>
    

    相册页面代码

    
    public class ChooseAlbumActivity extends Activity {
    
        private ListView lst;
        private HashMap<String, List<String>> albums;
        private MyAdapter myAdapter;
    
        private ViewStub loading;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.mine_choose_album);
    
            loading = findViewById(R.id.loading);
            lst = findViewById(R.id.lst);
            lst.setAdapter(myAdapter = new MyAdapter());
    
            lst.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Intent intent = new Intent(ChooseAlbumActivity.this, ChoosePhotoActivity.class);
                    intent.putExtra("photos", (Serializable) albums.get(albums.keySet().toArray()[position]));
                    intent.putExtra("sign", getIntent().getIntExtra("sign", -1));
                    startActivity(intent);
                }
            });
    
            findViewById(R.id.btn_back).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                }
            });
        }
    
    
        private class MyAdapter extends BaseAdapter {
            @Override
            public int getCount() {
                if (albums == null)
                    return 0;
                return albums.size();
            }
    
            @Override
            public Object getItem(int position) {
                return null;
            }
    
            @Override
            public long getItemId(int position) {
                return position;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                ViewHolder viewHolder = null;
                if (convertView == null){
                    convertView = LayoutInflater.from(ChooseAlbumActivity.this).inflate(R.layout.own_album_item, null, false);
                    viewHolder = new ViewHolder();
                    viewHolder.path = convertView.findViewById(R.id.path);
                    viewHolder.img = convertView.findViewById(R.id.img);
                    viewHolder.size = convertView.findViewById(R.id.size);
                    convertView.setTag(viewHolder);
                }
                else
                    viewHolder = (ViewHolder) convertView.getTag();
    
                viewHolder.size.setText("此相册共有:" + albums.get(albums.keySet().toArray()[position]).size() + "张");
                viewHolder.path.setText(((String)albums.keySet().toArray()[position]).replace(Environment.getExternalStorageDirectory().getPath() + "/", ""));
                MyImgShow.showLocalImgSquare(ChooseAlbumActivity.this, "file://" + albums.get(albums.keySet().toArray()[position]).get(0), viewHolder.img);
                return convertView;
            }
    
            public class ViewHolder {
                TextView path;
                ImageView img;
                TextView size;
            }
        }
    
    
        @Override
        protected void onResume() {
            super.onResume();
            new WeakTask<Integer>(new MyWeakTaskListener()).execute();
        }
    
        private HashMap<String, List<String>> getSystemPhotoList()
        {
            HashMap<String, List<String>> temps = new HashMap<String, List<String>>();
    
            Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    
            ContentResolver contentResolver = this.getContentResolver();
            Cursor cursor = contentResolver.query(uri, null, null, null, null);
            if (cursor == null || cursor.getCount() <= 0)
                return temps; // 没有图片
            while (cursor.moveToNext())
            {
                int index = cursor
                        .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    
                String path = cursor.getString(index); // 文件地址
                File file = new File(path);
                if (file.exists())
                {
                    String fatherPath = path.substring(0, path.lastIndexOf('/'));
                    if (temps.get(fatherPath) == null){
                        temps.put(fatherPath, new ArrayList<String>());
                    }
                    temps.get(fatherPath).add(path);
                }
            }
    
            Object[] keys = temps.keySet().toArray();
            for (int i = 0; i < keys.length; i++){
                Collections.reverse(temps.get(keys[i]));
            }
            return temps;
        }
    
    
        private class MyWeakTaskListener implements OnWeakTaskListener<Integer>{
    
            @Override
            public void before() {
                loading.setVisibility(View.VISIBLE);
            }
    
            @Override
            public Integer middle() {
                albums = getSystemPhotoList();
                return 2;
            }
    
    
            @Override
            public void after(Integer integer) {
                loading.setVisibility(View.GONE);
                myAdapter.notifyDataSetChanged();
            }
    
        }
    }
    

    图片页面代码

    
    
    public class ChoosePhotoActivity extends Activity {
    
        private GridView grid;
    
        private List<String> photos;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.mine_choose_photo);
    
            grid = findViewById(R.id.grid);
    
    
            photos = (List<String>) getIntent().getSerializableExtra("photos");
    
            grid.setAdapter(new MyAdapter());
    
            grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    //在这里添加事件
                    Intent intent = new Intent(ChoosePhotoActivity.this, ChooseResultActivity.class);
                    startActivity(intent.putExtra("path", photos.get(position)));
                }
            });
    
            findViewById(R.id.btn_back).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                }
            });
        }
    
        private class MyAdapter extends BaseAdapter {
            @Override
            public int getCount() {
                if (photos == null)
                    return 0;
                return photos.size();
            }
    
            @Override
            public Object getItem(int position) {
                return null;
            }
    
            @Override
            public long getItemId(int position) {
                return position;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                ViewHolder viewHolder = null;
                if (convertView == null) {
                    convertView = LayoutInflater.from(ChoosePhotoActivity.this).inflate(R.layout.own_photo_item, grid, false);
                    viewHolder = new ViewHolder();
                    viewHolder.img = convertView.findViewById(R.id.img);
                    convertView.setTag(viewHolder);
                } else
                    viewHolder = (ViewHolder) convertView.getTag();
    
                MyImgShow.showLocalImgSquare(ChoosePhotoActivity.this, "file://" + photos.get(position), viewHolder.img);
                return convertView;
            }
    
            public class ViewHolder {
                ImageView img;
            }
        }
    }
    

    辅助类

    MyImageShow
    public class MyImgShow {
        public static void showLocalImgSquare(Context context, String url, ImageView img){
            Glide.with(context)
                    .load(url)
                    .asBitmap()
                    .error(R.drawable.error)
                    .placeholder(R.drawable.placehoder)
                    .dontAnimate()
                    .override(200, 200)
                    .diskCacheStrategy(DiskCacheStrategy.RESULT)
                    .fitCenter()
                    .into(img);
        }
    }
    
    WeakTask
    https://www.jianshu.com/p/4bfabe07b23a

    相关文章

      网友评论

        本文标题:Android----从相册选取图片

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