工作这么久以来,都是以解决需求为目标。渐渐发现这种学习方式不好,学到的知识能马上解决问题,但没有经过梳理归纳。故想系统总结下一些有趣味的知识点。在这篇博客中想以一个例子系统讲解下GridView控件涉及到的方方面面,比如监听,背景图的设置等。

  1.控件属性介绍

android:listSelector="@drawable/bg"

//该属性很重要,如果不设置的话,GridView控件会自带自己的选中样式(黄色边框),如图所示:

做项目一般是不需要这个的。所以解决办法是将GridView的android:listSelector属性设置为和Activity背景相同即可。
    android:verticalSpacing="10dp"  //行宽
    android:horizontalSpacing="10dip"  //列宽
    android:numColumns="3"  //列数

    android:stretchMode="columnWidth"  //列可扩展
      以上列数为3,若想在高分辨率中列数设置为4怎么办呢。

    首先,需要在属性中设置列为可扩展android:stretchMode="columnWidth"。然后在代码中做个判断:

    if(Metrics.heightPixels == 1280 && Metrics.widthPixels == 800){
               gridview.setNumColumns(4);
          }这样GridView的列数是可以随分辨率不同而做更多的设置。

2.例子一:设置个边框,并且右上角设置个CheckBox来美化选中状态(左图→右图)。

这个Item的xml设计中,我是用两个ImageView控件来实现的.

   第一个ImageView 要设置一个属性:android:layout_margin="4dip"。上下左右留出4dip的具体来显示边框的效果。并且在相应的Adapter中做个判断,选中的话背景图片颜色为#87CEFA,未选中时为3FFFFFF:

  if(bSelect){ //bSelect表示是否选中
   arg1.setBackgroundColor(Color.parseColor("#87CEFA"));
  }else{
   arg1.setBackgroundColor(Color.parseColor("#FFFFFF"));   右上角的看起来像复选框,其实我也是用ImageView控件来实现的。界面设计很重要,距离要对好。我设置的该控件离上边距和右边距分别为2dip的距离。同样的只需要修改该ImageView所绑定的图片就可以。   if(bSelect){
  viewclass.checkboxImage.setImageBitmap(bmpwater_sel); //bmpwater_sel表示左图右上角的图片
  }else{
  viewclass.checkboxImage.setImageBitmap(bmpwater_unsel); //bmpwater_unsel表示右图右上角的图片
}

 3.例子二:打开一个GridView控件的Activity时,如果打开的图片过多,如何让图片异步加载。如图所示:

首先在界面定义中要定义一个全屏显示的加载圈效果,叫做mLoading。程序刚启动时显示图片加载结束后调用函数mLoading.setVisibility(View.GONE);让它不显示。我是用一个函数来调用它,这样更好的体现了封装性,如下:

   private void showLoading(boolean bShow){
      if(mLoading == null) return;
      mLoading.setVisibility(bShow ? View.VISIBLE : View.GONE);
   }

xml中该加载框的设计如下:

<span style="font-size: 13px;"><RelativeLayout android:id="@+id/video_tip_layout"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<ProgressBar style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content" android:id="@+id/video_tip_progressbar"
android:layout_height="wrap_content" android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<TextView android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/video_tip_text" android:text="加载中..."
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/video_tip_progressbar"
android:textColor="#808080"
android:layout_centerHorizontal="true"></TextView>
</span>

  ①为了不卡主线程,实现这一的效果要多开一个线程。在该线程中调用函数 InitList(),在该函数中将图片加载到ArrayList中去(花时间最多的就是对多图片的处理,这个放在子线程中可以不卡主线程,如果直接在主 线程中做,会让画面出现2-3秒的黑屏停顿)。

  像这样,在onCreate方法中开一个子线程:

  new Thread(new Runnable() {
     @Override
     public void run() {
        InitList();
     }
    }).start();

  ②方法InitList()中要做两件事情。一是加载图片,二是通知Handler图片加载完成(因为子线程不可以操作UI控件,只能通过Handler的方式)。

  private void InitList()
  {

    XXXX; //加载图片代码
      mMainHandler.sendMessage(MainHandler.MSG_FINISH); //发送消息
    }

  ③当收到InitList发送的消息时就让上面所提的mLoading不显示。同时GridView绑定adapter的代码也在这个里面写。因为图片加载完成后再绑定adapter,这样图片才能全部显示,否则只能显示一部分。

     case MSG_FINISH:
        showLoading(false); //让加载框不再显示
        gridview.setAdapter(ia); //绑定数据
       break;
     default:
       break;

  提供几张我们专业设计师做的美图,大家可以下载素材尝试一下,做个demo。地址:http://www.kuaipan.cn/file/id_37676161790126914.html

  

Android 有趣味的GridView的更多相关文章

  1. Android实现自适应正方形GridView

    Android实现自适应正方形GridView  

  2. Android控件之GridView探究

    GridView是一项显示二维的viewgroup,可滚动的网格.一般用来显示多张图片. 以下模拟九宫图的实现,当鼠标点击图片时会进行相应的跳转链接. 目录结构 main.xml布局文件,存放Grid ...

  3. [Android Pro] listView和GridView的item设置的高度和宽度不起作用

    referece to : http://blog.csdn.net/beibeixiao/article/details/9032569 1.     在Android开发中会发现,有时listVi ...

  4. 【转载】 Android PullToRefresh (ListView GridView 下拉刷新) 使用详解

    Android下拉刷新pullToRefreshListViewGridView 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/3 ...

  5. Android成长日记-使用GridView显示多行数据

    本节将实现以下效果 Ps:看起来很不错的样子吧,而且很像九宫格/se ----------------------------------------------------------------- ...

  6. 解决android expandablelistview 里面嵌入gridview行数据重复问题

    最近做了一个“csdn专家博客App” 当然了是android版本,在专家浏览页面,我才用了expandablelistview 组件来显示专家分类,每个分类点击之后可以显示专家的头像和名字. 很简单 ...

  7. Android PullToRefresh (ListView GridView 下拉刷新) 使用详解

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38238749,本文出自:[张鸿洋的博客] 群里一哥们今天聊天偶然提到这个git ...

  8. Android PullToRefresh (ListView GridView 下拉刷新) 使用详解 (转载)

    最近项目用到下拉刷新,上来加载更多,这里对PullToRefresh这控件进行了解和使用. 以下内容转载自:http://blog.csdn.net/lmj623565791/article/deta ...

  9. android学习笔记14——GridView、ImageSwitcher

    GridView--网格视图.ImageSwitcher--图像切换器 ==> GridView,用于在界面上按行.列的分布形式显示多个组件:GridView和ListView父类相同——Abs ...

随机推荐

  1. Java中的字符串流的读取和写入(创建文件并判断重复账户)

    各位我又来了!!哎!好心酸!我还没注册到三天!!没法登上博客的首页!!心累!! import java.io.BufferedOutputStream; import java.io.Buffered ...

  2. 10款AJAX/CSS/HTML的在线表单生成器

    本文转载:http://www.oschina.net/news/24327/10-ajax-css-html-online-form-builder 在这篇文章中,我们将介绍10个超棒的在线表单生成 ...

  3. Directx 3D编程实例:多个3D球的综合Directx实例

    最近朋友建议我写一些关于微软云技术的博客留给学校下一届的学生们看,怕下一届的MSTC断档.于是我也觉的有这个必要.写了几篇博客之后,我觉得也有必要把这一年的学习内容放在博客做个纪念,就这样写了本篇博客 ...

  4. Android中的双向链表

    1.看源代码必须搞懂Android的数据结构.在init源代码中双向链表listnode使用非常多,它仅仅有prev和next两个指针,没有不论什么数据成员.这个和linux内核的list_head如 ...

  5. Qt 学习之路:存储容器

    存储容器(containers)有时候也被称为集合(collections),是能够在内存中存储其它特定类型的对象,通常是一些常用的数据结构,一般是通用模板类的形式.C++ 提供了一套完整的解决方案, ...

  6. The requested URL ***** was not found on this serve

    Wamp的Alias具体是干什么用的,后面要研究一下!!!! 我是之前创建了一个站点用Alias,后来把站点文件移到了www下后,除了首页都访问不了了.显示“The requested URL *** ...

  7. 编写利用Fragment创建新闻列表

    编写利用Fragment创建新闻列表 1.创建新闻实体类News,代码如下:   public class News { private String title; private String co ...

  8. 如何修改mtk android 默认拍照size

    [DESCRIPTION] 修改默认拍照size [SOLUTION] 修改默认的capture size,改变camera feature table的FID_CAP_SIZE default值不起 ...

  9. Linux基本权限

    首先需要我们了解的是,权限(rwx)对于文件和目录的作用是不一样的 . 权限对文件的作用 r : 读取文件内容(cat , more , head , tail) w: 编辑.新增.修改文件内容(vi ...

  10. Swift - 08 - 元组

    //: Playground - noun: a place where people can play import UIKit // 元组就是将多个不同的值集合成一个数据 /* 元组是Object ...