Android GridView仿微信朋友圈显示图片

最近项目要求上传多图并且多图显示,而且要规则的显示,就像微信朋友圈的图片显示一样。
利用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" >
 <ImageView
  android: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列图片
  //上传成功传值给adapter
  picAdapter = 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")
 @Override
 protected 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.

本文已被整理到了《Android微信开发教程汇总》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助。

(0)

相关推荐

  • android GridView多选效果的实例代码

    具体代码如下: main.xml 复制代码 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:background="#000000" android:layout_width="fill_parent"

  • Android中RecyclerView布局代替GridView实现类似支付宝的界面

    单纯使用GridView 通用的两种给GridView 添加分割线的方法:http://stackoverflow.com/questions/7132030/android-gridview-draw-dividers 给Gridview 添加分割线,也就是实现网格布局,不清楚谷歌为什么没有给Gridview 添加一个类似 ListView 的Divider 属性,因此就需要我们自己去添加分割线, 目前两种方法,第一种是 利用GridView 的  android:horizontalSpac

  • Android开发中GridView用法示例

    本文实例讲述了Android开发中GridView用法.分享给大家供大家参考,具体如下: Android的GridView控件用于把一系列的空间组织成一个二维的网格显示出来,应用的比较多的就是组合图片显示.下面我就详细讲一个例子. 首先写一个类继承BaseAdapter 1. Java代码 package com.yarin.android.Examples_04_19; import android.content.Context; import android.view.View; impo

  • Android开发之使用GridView展示图片的方法

    本文实例讲述了Android使用GridView展示图片的方法.分享给大家供大家参考,具体如下: 今天说说GridView的使用. 所谓GvidView翻译过来就是网格布局:是一个ViewGroup以网格显示它的子视图(view)元素,即二维的.可滚动的网格.网格元素通过ListAdapter自动插入到网格. 这个GridView用处特别多,我这里是用来展示广告的.2*3的广告位置. 废话少说先看个效果图,有图就可以说个XX,对吧,大家都懂的. 大家可以看到搜索下面的那6个块,效果布局还行吧,哈

  • Android控件之GridView用法实例分析

    本文实例讲述了Android控件之GridView用法.分享给大家供大家参考.具体如下: GridView是一项显示二维的viewgroup,可滚动的网格.一般用来显示多张图片. 以下模拟九宫图的实现,当鼠标点击图片时会进行相应的跳转链接. 目录结构如下: main.xml布局文件,存放GridView控件 <?xml version="1.0" encoding="utf-8"?> <!-- android:numColumns="au

  • android中GridView的用法示例

    在Android程序设计中GridView跟ListView都是比较常用的多控件布局,而GridView更是实现九宫图的首选!本文就是介绍如何使用GridView实现九宫图.GridView的用法很多,网上介绍最多的方法就是自己实现一个ImageAdapter继承BaseAdapter,再供GridView使用,类似这种的方法本文不再重复,本文介绍的GridView用法跟之前介绍过的ListView极其类似. 我们先来看看本文代码运行的结果: 本文需要添加/修改3个文件:main.xml.nig

  • Android开发之实现GridView支付宝九宫格

    先给大家展示下关于仿支付宝钱包首页中带有分割线的gridview,俗称九宫格 的效果图,怎么样是不是和你想象的一样啊.在你的预料之中就继续访问以下代码内容吧. 我们都知道ListView设置分割线是非常容易的,设置ListView的分割线颜色和宽度,只需要在布局中定义android:divider和android:dividerHeight属性即可.而GridView并没有这样的属性和方法,那我们改如何来做呢? 我们小编在做这个效果之前,也参考了其他的一些方案,比如说定义一个自定义的GridVi

  • android ListView和GridView拖拽移位实现代码

    关于ListView拖拽移动位置,想必大家并不陌生,比较不错的软件都用到如此功能了.如:搜狐,网易,百度等,但是相比来说还是百度的用户体验较好,不偏心了,下面看几个示例:             首先说一下:拖拽ListView的item就不应该可以任意移动,只应该在ListView所在的范围内,而网易的你看看我都可以移动到状态栏了,虽然你做了处理,但是用户体验我个人感觉不好,在看看百度的,不仅控制了移动范围,更不错的百度的移动起来会时时的换位,看起来相当的形象,所以我认为这样相当的棒.说明一点

  • Android实现九宫格(GridView中各项平分空间)的方法

    本文实例讲述了Android实现九宫格(GridView中各项平分空间)的方法.分享给大家供大家参考.具体如下: 项目需要做一个九宫格(也不一定是9的,4宫格.16宫格.4x3宫格...),封了 一个宫格,它能够根据为它分配的空间来自动的调节宫中各项的尺寸. 从TableLayout集成来的,因此如果你直接在设计器上使用该封装的话需要把它自动加进去的那几个TableRow删除一下. 类名为AdvancedGridView,代码如下: import android.content.Context;

  • Android实现GridView中ImageView动态变换的方法

    本文实例讲述了Android实现GridView中ImageView动态变换的方法.分享给大家供大家参考.具体如下: 使用YY影音的时候,发现点击GridView的某一个Item,Item里面的图标会在按下的时候发生变换,变成另外一个图片. 自己写了一个类似的demo,具体步骤如下: 1.创建一个包含Grid的Acitity 2.创建item.xml 里面包含一个imageview和一个textview 3.自定义一个adapter,从baseadapter继承 4.在getView中为每个im

  • Android中实现多行、水平滚动的分页的Gridview实例源码

    功能要求: (1)比如每页显示2X2,总共2XN,每个item显示图片+文字(点击有链接). 如果单行水平滚动,可以用Horizontalscrollview实现. 如果是多行水平滚动,则结合Gridview(一般是垂直滚动的)和Horizontalscrollview实现. (2)水平滚动翻页,下面有显示当前页的icon. 1.实现自定义的HorizontalScrollView(HorizontalScrollView.java): 因为要翻页时需要传当前页给调用者,所以fling函数中自己

  • Android GridView实现滚动到指定位置的方法

    当一个列表项目很多,并且每个项目可以进入到其它Activity或者Fragment时,保存之前列表的位置是一个比较不错的功能, 今天研究了一下怎么保存浏览位置,发现GridView和它的父类中有4个相关的方法: 复制代码 代码如下: public void smoothScrollToPosition (int position) 滚动到position指定的位置,api level 11之下可用 *当你滚动完后,返回列表,能正常滚动,但是你再次从列表的项目返回后,滚动失效,就是只能滚动一次,我

随机推荐