今天闲下来想用心写一点东西,发现没什么可写的,就写一下最近项目上用到的一些东西吧。最近项目要求上传多图并且多图显示,而且要规则的显示,就像微信朋友圈的图片显示一样。
想了一下用GridView再适合不过了,GridView可以动态加载图片的数量,而且还比较规律。下面说一下自己的思路:
1.获取网络图片
2.初始化gridview,自定义适配器
3.根据图片数量设置gridview的列数
4.更新适配器
下面贴上部分源码并给大家解析一下
一、首先是GridView的item:
<com.view.SquareLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical" ><ImageViewandroid:id="@+id/item_grida_image"android:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="fitXY"android:layout_margin="@dimen/tinyest_space"></ImageView>
</com.view.SquareLayout>
这里的SquareLayout布局是自定义的下面会给大家详细讲解。
子项中是一个正方形布局里面嵌套着图片
二、接下来自定义适配器
因为项目需求不同,自己定义的适配器和平时用的不太一样,这里就不贴源码了。大体上也是将图片下载到本地,用Imageloader加载,不过我这里有上传失败的和新建的,所以不太一样。
三、最后在用到的Activity中设置
noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);noScrollgridview.setNumColumns(3);  //默认设置在3列图片//上传成功传值给adapterpicAdapter = new PictureAdapter(this, 1, appItem_file);noScrollgridview.setAdapter(picAdapter);
//根据图片数量设置图片的列int size = appItemFile.getFiles().split(",").length;if (size==1){noScrollgridview.setNumColumns(1);}else if (size==2){noScrollgridview.setNumColumns(2);}else if (size>2){noScrollgridview.setNumColumns(3);}picAdapter.notifyDataSetChanged();
默认设置GridView的列数为3,根据图片的数量动态设置列数。
最后贴上SquareLayout的源码解析一下
/*** 方形布局*/
public class SquareLayout extends RelativeLayout {public SquareLayout(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}public SquareLayout(Context context, AttributeSet attrs) {super(context, attrs);}public SquareLayout(Context context) {super(context);}@SuppressWarnings("unused")@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// For simple implementation, or internal size is always 0.// We depend on the container to specify the layout size of// our view. We can't really know what it is since we will be// adding and removing different arbitrary views and do not// want the layout to change as this happens.setMeasuredDimension(getDefaultSize(0, widthMeasureSpec),getDefaultSize(0, heightMeasureSpec));// Children are just made to fill our space.int childWidthSize = getMeasuredWidth();int childHeightSize = getMeasuredHeight();// 高度和宽度一样heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidthSize, MeasureSpec.EXACTLY);super.onMeasure(widthMeasureSpec, heightMeasureSpec);}
}
这里主要重写了onMeasure()方法,设置了高宽,需要注意的是在用SquareLayout的时候要设置它的高宽都是match_parent。这样就可以填满GridView的每一项了。
接下来贴图给大家看:

ImgeView的scaleType的属性如果设置FitXY就会充满方形布局,如果center就会居中显示
详细说一下吧:
1)center:保持原图的大小,显示在ImageView的中心。当原图的size大于ImageView的size,超过部分裁剪处理。
2)centerCrop:以填满整个ImageView为目的,将原图的中心对准ImageView的中心,等比例放大原图,直到填满ImageView为止(指的是ImageView的宽和高都要填满),原图超过ImageView的部分作裁剪处理。
3)centerInside:以原图完全显示为目的,将图片的内容完整居中显示,通过按比例缩小原图的size宽(高)等于或小于ImageView的宽(高)。如果原图的size本身就小于ImageView的size,则原图的size不作任何处理,居中显示在ImageView。
4)matrix:不改变原图的大小,从ImageView的左上角开始绘制原图,原图超过ImageView的部分作裁剪处理
5)fitCenter:把原图按比例扩大或缩小到ImageView的ImageView的高度,居中显示
6)fitEnd:把原图按比例扩大(缩小)到ImageView的高度,显示在ImageView的下部分位置
7)fitStart:把原图按比例扩大(缩小)到ImageView的高度,显示在ImageView的上部分位置
8)fitXY:把原图按照指定的大小在View中显示,拉伸显示图片,不保持原比例,填满ImageView.
ok就先这样了,以后我会经常更新博客和大家分享的

【Android 控件使用及源码解析】 GridView规则显示图片仿微信朋友圈发图片相关推荐

  1. Android仿微信朋友圈发图片和文字

    Android仿微信朋友圈发图片和文字的一个开源项目,其在github上的项目主页是:https://github.com/zhangphil/FangWeiXinPengYouQuanFaTuPia ...

  2. android从九宫格全屏预览,仿微信朋友圈展示图片的九宫格图片展示控件,支持点击图片全屏预览大图...

    AssNineGridView 仿微信朋友圈展示图片的九宫格图片展示控件,支持点击图片全屏预览大图(可自定义). 写在前面 这是一个九宫格控件,本来是很久之前就写好了,现在才开源出来,也是看了很多优秀 ...

  3. Android 实现仿微信朋友圈九宫格图片+NineGridView+ImageWatcher(图片查看:1.预览,2.拖动,3.放大,4.左右滑动,5.长按保存到手机)的功能

    一.测试 实现: 二.添加依赖包: implementation 'androidx.appcompat:appcompat:1.1.0'implementation 'androidx.recycl ...

  4. Android 仿微信朋友圈添加图片

    github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...

  5. Android 仿微信朋友圈发表图片拖拽和删除功能

    朋友圈实现原理 我们使用 Android Device Monitor 来分析朋友圈发布图片的界面实现原理.如果需要分析其他应用的界面实现也是采用这种方法哦. 打开 Android Device Mo ...

  6. Android简易图片管理器,一个简单仿微信朋友圈的图片查看器 PhotoViewer

    PhotoViewer 该图片查看器是模仿微信朋友圈查看图片编写 allprojects { repositories { ... maven { url 'https://jitpack.io' } ...

  7. android仿空间照片查看器,PhotoViewer 一个简单仿微信朋友圈的图片查看器

    该图片查看器是模仿微信朋友圈查看图片编写 allprojects { repositories { ... maven { url 'https://jitpack.io' } } } lastRel ...

  8. iOS粒子特效、仿微信朋友圈、转场动画、抢红包动画等源码

    iOS精选源码 viewController 之间的转场动画 swift版 视频添加水印及粒子特效 小红点(消息推送提醒)完整解决方案 仿微信朋友圈–CircleOfFriendsDisplay 图片 ...

  9. Android Glide 3.7.0 源码解析(八) , RecyclableBufferedInputStream 的 mark/reset 实现

    个人博客传送门 一.mark / reset 的作用 Android Glide 3.7.0 源码解析(七) , 细说图形变换和解码有提到过RecyclableBufferedInputStream ...

最新文章

  1. ubuntu下wireshark添加root权限
  2. asp.net中上传文件实例
  3. 洛谷1231 教辅的组成
  4. HEVC流媒体服务器被过度炒作的5个原因
  5. 关系数据可视化gephi
  6. 学考语言成绩c对高考有影响吗_三大影响!考生务必上心,最近正在进行的学考对升学很重要...
  7. c语言单链表_突破C语言难点之单链表?一绘图即可
  8. 华为云GuassDB(for Redis)发布全新版本推出:Lua脚本和SSL连接加密
  9. shell编程入门步步高(二、基础概念)
  10. QT中文乱码的解决方法,一劳永股的解决方法,如下
  11. java mybatis 事务,单独的使用mybatis 如何来管理事务
  12. 步进电机控制(PLC)
  13. 分布式机器学习(下)-联邦学习
  14. 重装系统后计算机无法启动,重装系统后电脑为什么启动不了?云骑士告诉你怎么办?...
  15. C语言用随机函数做猜拳游戏,c语言猜拳游戏
  16. UE4使用时间轴制作简单开关门
  17. 中北大学计算机研究生学院,【计算机考研】院校信息-中北大学
  18. gcc: internal compiler error: Killed (program cc1plus)
  19. 全球顶尖大学已将区块链加入其课程
  20. 1.3 万亿条数据查询,如何做到毫秒级响应?

热门文章

  1. 顺序二叉树---实现数组的二叉树前序遍历输出
  2. 怎么将音频音量进行扩大?分享三个简单好用的方法!
  3. Andorid 八角盘(风水八宅图)八圆轮简单实现
  4. oracle创建自增序列并每日刷新
  5. [必藏]Android 最棒的开源集合库
  6. 中标麒麟linux操作系统下的英伟达(NV/nvidia)显卡驱动安装
  7. Java导出csv修正时间格式
  8. 巨巨的磁盘(线段树)
  9. 创业本身就是一个修炼自己的过程
  10. 理解哈希表1(转贴)