Android将手机相册图片展示到GridView中
16lz
2021-01-23
Android将手机相册图片展示到GridView中
标签: Android相册加载相册图片 2016-06-19 00:16 593人阅读 评论(0) 收藏 举报 分类: android(28)版权声明:本文为博主原创文章,未经博主允许不得转载。
这个demo虽然实现了圆形头像加载,但是我们今天重点不是说原型头像,重点说加载手机相册图片,相信大家项目中肯定会用到;
如果大家想了解圆形头像加载可以直接下载源码查看,或者看这篇博客圆形头像讲解
首先说下思路:
大家可以看到展示相册的布局使用的GridView,
我们需要知道两点就可以很容易的完成这个demo;
第一:怎么加载系统相册?
第二:怎么讲GridView的item宽高设置成一样?
先说第一个加载系统相册:
[java] view plain copy
- Cursor cursor = getContentResolver().query(
- MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
- //遍历相册
- while (cursor.moveToNext()) {
- String path = cursor.getString(cursor.getColumnIndex(MediaColumns.DATA));
- //将图片路径添加到集合
- paths.add(path);
- }
- cursor.close();
[java] view plain copy
- public class MyGridViewItem extends LinearLayout{
- public MyGridViewItem(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
- public MyGridViewItem(Context context) {
- super(context);
- }
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- setMeasuredDimension(getDefaultSize(0, widthMeasureSpec),getDefaultSize(0, heightMeasureSpec));
- // childWidthSize是自定义布局的宽
- int childWidthSize = getMeasuredWidth();
- int childHeightSize = getMeasuredHeight();
- // 高度和宽度一样;最后面的是RelativeLayout的宽
- heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidthSize, MeasureSpec.EXACTLY);
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- }
- }
好了,其他的几乎都是一些琐碎的代码
再说下加载图片到item:这里使用的是Glide框架,非常简单:
[java] view plain copy
- //当前item要加载的图片路径
- String path=paths.get(position);
- //使用谷歌官方提供的Glide加载图片
- Glide.with(context).load(new File(path)).diskCacheStrategy(DiskCacheStrategy.ALL).centerCrop().into(vh.imageView);
MainActivity:
[java] view plain copy
- public class MainActivity extends Activity implements View.OnClickListener {
- //主页面上下两个自定义的View(圆形的ImageView)
- private CircleImageView ivTop;
- private CircleImageView ivDown;
- private int INT_TOP=199;
- private int INT_DOWN=299;
- //上下文
- Context ctx;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- ctx=this;
- initView();
- }
- private void initView() {
- ivTop=(CircleImageView) findViewById(R.id.iv_top);
- ivDown=(CircleImageView) findViewById(R.id.iv_down);
- //给两个圆形的ImageView设置点击事件
- ivTop.setOnClickListener(this);
- ivDown.setOnClickListener(this);
- }
- @Override
- //设置两个圆形ImageView点击跳转
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.iv_top:
- Intent intent=new Intent(MainActivity.this,ShowAllImageActivity.class);
- startActivityForResult(intent, INT_TOP);
- break;
- case R.id.iv_down:
- Intent intent2=new Intent(MainActivity.this,ShowAllImageActivity.class);
- startActivityForResult(intent2, INT_DOWN);
- break;
- default:
- break;
- }
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if(requestCode==INT_TOP){
- String path = data.getStringExtra("path");
- Glide.with(ctx).load(new File(path)).diskCacheStrategy(DiskCacheStrategy.ALL).centerCrop().into(ivTop);
- }
- if(requestCode==INT_DOWN){
- String path = data.getStringExtra("path");
- Glide.with(ctx).load(new File(path)).diskCacheStrategy(DiskCacheStrategy.ALL).centerCrop().into(ivDown);
- }
- super.onActivityResult(requestCode, resultCode, data);
- }
- }
显示相册图片的Activity:
[java] view plain copy
- /**
- * Created by Administrator on 2016/6/15 0015.
- * 显示所有图片的activity
- */
- public class ShowAllImageActivity extends Activity {
- /**
- * 存储手机中所有图片的list集合
- */
- List
paths = new ArrayList (); - //用来显示手机中所有图片的GridView
- private GridView mGridView;
- Context context;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_showallimage);
- context=this;
- mGridView=(GridView) findViewById(R.id.gridview);
- //获得手机中所有图片的路径
- getAllImagePath();
- adapter=new MyGridViewAdapter();
- mGridView.setAdapter(adapter);
- //设置GridView的条目点击事件
- mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
- String path=paths.get(arg2);
- //当我点击某个图片的时候代表要给圆形ImageView设置头像,所以跳转到MainActivity
- Intent intent=new Intent(context,MainActivity.class);
- //仅仅跳转过去不行,必须将当前点击图片的路径带过去
- intent.putExtra("path", path);
- setResult(1,intent);
- finish();
- }
- });
- }
- private MyGridViewAdapter adapter;
- class MyGridViewAdapter extends BaseAdapter{
- @Override
- public int getCount() {
- return paths.size();
- }
- @Override
- public Object getItem(int position) {
- return null;
- }
- @Override
- public long getItemId(int position) {
- return 0;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder vh;
- if(convertView==null){
- //这里面的item是一个自定义的View继承线性布局,继承什么布局不重要,
- // 重要的是将item的宽高设置成一样;感觉这个效果项目中很多地方都能用到
- convertView=View.inflate(context, R.layout.gridview_item, null);
- vh=new ViewHolder();
- vh.imageView=(ImageView) convertView.findViewById(R.id.photo);
- convertView.setTag(vh);
- }else{
- vh=(ViewHolder) convertView.getTag();
- }
- //当前item要加载的图片路径
- String path=paths.get(position);
- //使用谷歌官方提供的Glide加载图片
- Glide.with(context).load(new File(path)).diskCacheStrategy(DiskCacheStrategy.ALL).centerCrop().into(vh.imageView);
- return convertView;
- }
- }
- class ViewHolder{
- ImageView imageView;
- }
- /**
- * 获得所有图片的路径
- */
- private void getAllImagePath() {
- Cursor cursor = getContentResolver().query(
- MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
- //遍历相册
- while (cursor.moveToNext()) {
- String path = cursor.getString(cursor.getColumnIndex(MediaColumns.DATA));
- //将图片路径添加到集合
- paths.add(path);
- }
- cursor.close();
- }
- }
更多相关文章
- Android webview 实现h5中调用原生系统相册/相机并进行图片压缩
- android app 浅谈文件上传(图片和文件)
- Android显示图片避免OOM和ANR小结
- 毕加索的艺术——Picasso,一个强大的Android图片下载缓存库,OkHtt
- Android异步加载图像小结----演化理解 Android 异步
- android ListView常见问题解决方法(滚动背景变黑,去除滑动时阴影,拖
- android使用ImageView加载本地SdCard图片和加载网络图片
- 源码分析android 系统framework(二)之view的布局加载流程
- Android中的WebView进行直接加载网页(要注意解决权限问题)