工作这么久以来,都是以解决需求为目标。渐渐发现这样的学习方式不好,学到的知识能立即解决这个问题,但没有经过梳理归纳。

故想系统总结下一些有趣味的知识点。

在这篇博客中想以一个样例系统解说下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表示右图右上角的图片
      }

  非常easy吧。你们能够试试。

  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

原文链接:http://www.cnblogs.com/carmanloneliness/archive/2012/05/29/android_%E8%B6%A3%E5%91%B3%E7%9A%84gridView%E6%8E%A7%E4%BB%B6.html

Android 之 GridView具体解释的更多相关文章

  1. Android中GridView通过自定义适配器(未优化)实现图文视图排列

    Android中GridView组件用来以网格方式排列视图,与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要显示时,可以使用该组件.下面我们通过代码实现如下图例(为了方便截图,将事件处理(土 ...

  2. Android中GridView拖拽的效果【android进化三十六】

      最 近看到联想,摩托罗拉等,手机launcher中有个效果,进入mainmenu后,里面的应用程序的图标可以拖来拖去,所以我也参照网上给的代码,写了 一个例子.还是很有趣的,实现的流畅度没有人家的 ...

  3. Android中GridView的实现实例

    实现效果: activity文件代码: package com.tmacsky; import android.app.Activity; import android.os.Bundle; impo ...

  4. Android中GridView拖拽的效果

    最 近看到联想,摩托罗拉等,手机launcher中有个效果,进入mainmenu后,里面的应用程序的图标可以拖来拖去,所以我也参照网上给的代码,写了 一个例子.还是很有趣的,实现的流畅度没有人家的那么 ...

  5. android 31 GridView

    GridView:网格列表,也支持适配器. package com.sxt.day05_01; import java.util.ArrayList; import java.util.List; i ...

  6. Android的GridView和Gallery结合Demo

    Android的GridView和Gallery结合Demo Demo介绍:首页是一个GridView加载图片,竖屏时显示3列图片,横屏时显示4列图片;并且对图片进行大小限制和加灰色边框处理. 点击某 ...

  7. android布局属性具体解释

    RelativeLayout用到的一些重要的属性: 1:LinearLayout ( 线性布局 ) (里面仅仅能够有一个控件,而且不能设计这个控件的位置,控件会放到左上角) 线性布局分为水平线性和垂直 ...

  8. Android中GridView的使用——使用自带的SimpleAdapter(简单适配器)

    GridView一直是一个系统登录后以九宫格方式展现功能子模块的最佳选择,经过试验和网上资料的查阅,现把实现方式总结一下: 一直是通过自定义Adapter方式,在getView()方法中设置图片的显示 ...

  9. 从头学起android&lt;GridView网格视图.二十八.&gt;

    GridView基于组件的网络格所有的形式的组分的,例如:当制作专辑,所有的图片将在相同的尺寸在不同的显示格在孩子,是否能够依靠这个组件完成.此组件的继承结构参见例如下面: java.lang.Obj ...

随机推荐

  1. table 中的tr 行点击 变换颜色背景

    <style> table{border-collapse: collapse;border-spacing: 0; width: 100%;} table tr th,td{border ...

  2. PL/SQL之游标的使用

    Oracle中的游标有两种: 显式游标 用CURSOR...IS 命令定义的游标,它可以对查询语句(SELECT)返回的多条记录进行处理. 隐式游标 是在执行插入(INSERT).删除(DELETE) ...

  3. 远程连接MongoDB数据库

    不使用用户名和密码 安装MongoDB后,默认不使用用户名和密码即可在本地登录,如需远程登录,只要修改/bin/mongo.conf文件即可

  4. docker 无法启动容器,run容器后状态为restarting

    问题:如题,无法进入容器,docker logs 容器id  发现 哦 ,原来缺少个文件,这些就容易了

  5. 实习小结(三)--- 权限管理(RBAC)

    这一周,大多数时间 用来做需求分析,细化每个页面需要实现的功能.由于这个项目需要四种身份登录查看,分别是学生,老师,领导,管理员.每个身份登入系统显示得页面都不相同,四个角色分析完成后,统计了一下页面 ...

  6. Code Signal_练习题_Add Border

    Given a rectangular matrix of characters, add a border of asterisks(*) to it. Example For picture = ...

  7. C#语言总结1

    C#C#定义: C#是一门面向对象.面向组件的一门语言,是.NET的一部分. 程序结构: 命名空间 类{ 属性 方法 main函数入口 } 数据类型: C#的数据类型分为:值类型(Value type ...

  8. Node.js如何找npm模板

    首先需要去官网下载npm文件 https://www.npmjs.com/ 下载完成,使用CD查看是否安装完成 然后就是贴代码看npm模板的功能 var _ = require('underscore ...

  9. Java中的数据类型转换

    先来看一个题: Java类Demo中存在方法func0.func1.func2.func3和func4,请问该方法中,哪些是不合法的定义?( ) public class Demo{ float fu ...

  10. LintCode2016年8月8日算法比赛----子树

    子树 题目描述 有两个不同大小的二叉树:T1有上百万的节点:T2有好几百的节点.请设计一种算法,判定T2是否为T1的子树. 注意事项 若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 ...