通过GridView实现网格显示组件的功能。

使用方法类似ListView,也需要通过Adapter加入数据

首先,建立主页的布局activity_stage_select.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    android:orientation="vertical" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >
    </LinearLayout>

//这里numColumn控制的是列布局,显示几列,置于每列的高度间隔,这是需要在adapter中代码设置的
    <GridView
        android:id="@+id/grid"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="8"
        android:numColumns="6" >
    </GridView>
</LinearLayout>

第二个布局grid_stage.xml主要是为GridView填充数据的

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="10dp"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="10dp" >
    <TextView
        android:id="@+id/stage_num_text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:textColor="#999999"
        android:textSize="10sp" />
</LinearLayout>

第三部,建立公共的Global类,获取屏幕大小,便于后面等比控制屏幕大小

package org.liky.crazy.util;
import android.app.Activity;
public class Globals {
public static int SCREEN_WIDTH;
public static int SCREEN_HEIGHT;
public static void init(Activity a) {
SCREEN_WIDTH = a.getWindowManager().getDefaultDisplay().getWidth();
SCREEN_HEIGHT = a.getWindowManager().getDefaultDisplay().getHeight();
}
}

第四部:建立StageAdapter类处理GridView中的数据

package org.liky.crazy.adapter;
import java.util.List;
import java.util.Map;
import org.liky.crazy.R;
import org.liky.crazy.util.Globals;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class StageAdapter extends BaseAdapter {
private Context ctx;
private List<Map<String, Object>> allValues;
public StageAdapter(Context ctx, List<Map<String, Object>> allValues) {
this.ctx = ctx;
this.allValues = allValues;
}
@Override
public int getCount() {
return allValues.size();
}
@Override
public Object getItem(int position) {
return allValues.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(ctx).inflate(R.layout.grid_stage,
null);
convertView.setLayoutParams(new LayoutParams(
LayoutParams.MATCH_PARENT, Globals.SCREEN_HEIGHT / 9));
}
Map<String, Object> map = allValues.get(position);
TextView stageNumText = (TextView) convertView
.findViewById(R.id.stage_num_text);
stageNumText.setText(map.get("stageNum").toString());
stageNumText.getLayoutParams().height = Globals.SCREEN_HEIGHT / 9 - 20;

// 设置背景颜色, 在集合中保存一个关卡是否可以玩的标记
boolean flag = (Boolean) map.get("flag");
if (flag) {
stageNumText.setBackgroundColor(Color.WHITE);
} else {
stageNumText.setBackgroundColor(Color.BLACK);
}
return convertView;
}
}

最后,实现StageSelectActivity操作

package org.liky.crazy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.liky.crazy.adapter.StageAdapter;
import org.liky.crazy.util.Globals;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.Toast;
public class StageSelectActivity extends Activity {
private GridView grid;
private List<Map<String, Object>> allValues = new ArrayList<Map<String, Object>>();
private StageAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//初始化公共类
Globals.init(this);
setContentView(R.layout.activity_stage_select);
grid = (GridView) findViewById(R.id.grid);
// 加入数据
for (int i = 0; i < 50; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("stageNum", i + 1);
if (i < 10) {
map.put("flag", true);
} else {
map.put("flag", false);
}
allValues.add(map);
}
adapter = new StageAdapter(this, allValues);
grid.setAdapter(adapter);
// 加入监听, 判断用户所点击的关卡项
grid.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Map<String, Object> map = allValues.get(arg2);
int stageNum = (Integer) map.get("stageNum");
boolean flag = (Boolean) map.get("flag");
if (flag) {
Toast.makeText(StageSelectActivity.this,
"进入了关卡: " + stageNum, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(StageSelectActivity.this,
"该关卡不能玩: " + stageNum, Toast.LENGTH_SHORT).show();
}
}
});
}
}

GridView网格组件,实现疯狂猜图的首页选关功能相关推荐

  1. Flutter学习笔记--Gridview网格组件制作相册

    Flutter学习笔记–Gridview网格组件制作相册 效果: GridView可以构建一个二维网格列表,其官方定义参考: https://book.flutterchina.club/chapte ...

  2. UI组件之AdapterView及其子类(二)GridView网格视图的使用

    GridView网格视图属性: android:numColumns="auto_fit" --------列数设置为自动,可以为确定的数值 android:columnWidth ...

  3. 【Flutter】GridView 网格布局 ( GridView.count 构造函数 | crossAxisCount 参数指定每行元素个数 )

    文章目录 一.GridView 网格布局简介 二.完整代码示例 三.相关资源 一.GridView 网格布局简介 GridView 可用于显示网格布局 ; 一般使用 GridView.count 函数 ...

  4. 闲云旅游项目开发-(第四篇:机票首页/机票搜索功能(`el-autocomplete`远程搜索组件)/moment.js的使用/日期选择组件el-date-picker)

    目录 相关组件介绍 一 机票首页布局 二 封装搜索组件 1. 组件布局 2.目标思路 3.步骤 3.1 基本功能 3.2 自动补全 3.3获取真正的推荐数据 3.4 添加城市代号 3.5 处理日期格式 ...

  5. ASP.NET中 DropDownList+GridView(网格视图)的使用前台绑定[高]

    ylbtech-ASP.NET-Control-Bind:DropDownList+GridView(网格视图)的使用前台绑定[高] ASP.NET中 DropDownList+GridView(网格 ...

  6. Android中适用于ListView、GridView等组件的通用Adapter

    今天随便逛逛CSDN,看到主页上推荐了一篇文章Android 高速开发系列 打造万能的ListView GridView 适配器,刚好这两天写项目自己也封装了相似的CommonAdapter,曾经也在 ...

  7. Android应用开发—通用的GridView网格分割线

    注:本文基于 Android RecyclerView 使用完全解析 体验艺术般的控件 中关于GridView网格分割线部分代码扩展而来. 原接口代码: import android.content. ...

  8. Handsontable 12.3.0 JavaScript 数据网格组件 -Crack

    添加复制列标题内容的功能. 2022 年 12 月 15 日 - 9:54新版本 特征 添加了使用 3 个新的上下文菜单选项复制列标题内容的功能:"复制标题"."复制组标 ...

  9. vue 网格组件_简单的Vue组件可显示带有事件的月网格日历

    vue 网格组件 简洁日历 (vue-simple-calendar) vue-simple-calendar is a flexible, themeable, lightweight event ...

最新文章

  1. 【初窥javascript奥秘之事件机制】论“点透”与“鬼点击”
  2. 面向对象之this与super
  3. Intel Realsense C/C++ 转 python (9)rs-multicam 多摄像头可视化窗体显示
  4. 超简单的java爬虫
  5. ARM的UART实验
  6. Python学习---面向对象的学习[深入]
  7. 2017.7.17数据类型
  8. kotlin界面_Kotlin界面
  9. MapReducer随笔小记
  10. MT4跟单软件多帐户跨平台如何解决喊单账号与跟单账号个别品种合约数量不一致的问题?——Hookswork
  11. 电脑文件的后缀名不见了,如何显示隐藏扩展名?
  12. Windows10卸载密钥导致win10未激活--解决
  13. 判断DataTable中否存在指定列
  14. MPMoviePlayerController 电影播放器—备用
  15. 计算机怎么知道乘法优先,计算器算个明白.doc
  16. Linux系统配置及服务管理_第07章_存储管理2
  17. 电脑驱动是什么,它有什么作用呢?
  18. 电脑没有声音了怎么办?如何恢复?(电脑没声音的3个解决方法)
  19. 系统架构师(软考)----数据库基础
  20. xp系统怎样访问校园网服务器,有线校园网电脑连接教程

热门文章

  1. 地税计算机中心工作计划,地税局工作计划
  2. 盘点Python的6个优势与特点
  3. Apach Dril的计算流程说明
  4. input输入框使用正则限制为数字、英文及中文,微软自带输入法输入问题
  5. python中函数是一段子程序_用Python来写一个男女相亲小程序|码农的情人节
  6. 课程设计报告,Cisco,亿图,三层交换,路由设计
  7. 《炉石传说》卡牌描述中的那些梗,这脑洞突破天际!
  8. 电子商务对传统企业的革命
  9. Python实现和电脑猜拳的小游戏源代码
  10. react onClick回调