GridView与ListView基本相似。

第一步就是创建适配器,实现四个方法。

package com.example.myapplication.adapter;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridLayout;
import android.widget.GridView;
import android.widget.ImageView;import com.example.myapplication.utils.pexel.ScreenUtils;import java.util.List;public class GirdViewAdapter extends BaseAdapter {private List<Bitmap> bitmapList;private Context context;public GirdViewAdapter(Context context, List<Bitmap> list){bitmapList = list;this.context = context;}@Overridepublic int getCount() {return bitmapList.size();}@Overridepublic Object getItem(int i) {return null;}@Overridepublic long getItemId(int i) {return 0;}@Overridepublic View getView(int position, View contentView, ViewGroup viewGroup) {ImageView showImageView = null;int density = (int) ScreenUtils.getDeviceDensity(context);if(contentView == null){showImageView = new ImageView(context);showImageView.setLayoutParams(new GridView.LayoutParams(120*density,140*density)); //设置布局图片showImageView.setScaleType(ImageView.ScaleType.FIT_XY); //设置图片显示比例}else {showImageView = (ImageView) contentView;}showImageView.setBackgroundColor(Color.BLACK);showImageView.setImageBitmap(bitmapList.get(position));return showImageView;}
}

第二步在getView()方法中动态产生一些用于展示要选择的图片。

@Override
    public View getView(int position, View contentView, ViewGroup viewGroup) {
        ImageView showImageView = null;
        int density = (int) ScreenUtils.getDeviceDensity(context);
        if(contentView == null){
            showImageView = new ImageView(context);
            showImageView.setLayoutParams(new GridView.LayoutParams(120*density,140*density)); //设置布局图片
            showImageView.setScaleType(ImageView.ScaleType.FIT_XY); //设置图片显示比例
        }else {
            showImageView = (ImageView) contentView;
        }
        showImageView.setBackgroundColor(Color.BLACK);
        showImageView.setImageBitmap(bitmapList.get(position));
        return showImageView;
    }

第三部获取xml文件中的GridView子控件。

mGridView =(GridView) findViewById(R.id.gv_xpuzzle_pic_list);

布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/main_bg"tools:context=".MainGame"><!--   android:layout_centerHorizontal="true" 居中布局--><LinearLayoutandroid:id="@+id/ll_puzzle_main_spinner"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/puzzle_text"android:textColor="@color/main_text"android:layout_gravity="center"android:textSize="@dimen/text_title"/></LinearLayout><GridViewandroid:id="@+id/gv_xpuzzle_pic_list"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/ll_puzzle_main_spinner"android:padding="@dimen/padding"android:horizontalSpacing="@dimen/padding"android:layout_margin="@dimen/padding"android:gravity="center_horizontal"android:layout_centerHorizontal="true"android:numColumns="4"android:verticalSpacing="@dimen/padding"/>
</RelativeLayout>

第四部将是适配器设置给GridView控件上。

GirdViewAdapter adapter = new GirdViewAdapter( MainGame.this,mPicList);
mGridView.setAdapter(adapter);

第五步扩展,GridView添加事件监听。

GirdViewAdapter adapter = new GirdViewAdapter( MainGame.this,mPicList);
mGridView.setAdapter(adapter);
mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {if(position == mResPicID.length-1){//选择本地图库还是相机showDialogCustom();}else {Intent intent = new Intent(MainGame.this,PuzzleActivity.class);intent.putExtra("picSelectedID",mResPicID[position]);intent.putExtra("mType",mType);startActivity(intent);}}
});

代码如下

package com.example.myapplication;import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;import android.Manifest;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.Gravity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.GridView;
import android.widget.PopupWindow;import com.example.myapplication.adapter.GirdViewAdapter;
import com.example.myapplication.utils.pexel.ScreenUtils;import java.io.File;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;public class MainGame extends AppCompatActivity {private PopupWindow mPopupWindow;private View mPopupView;private GridView mGridView;private int[] mResPicID;private List<Bitmap> mPicList = new ArrayList<>();private static final int RESULT_IMAGE=100; //本地图库的返回码private static final String IMAGE_TYPE="image/*";private static String TEMP_PATH;private static final int RESULT_CAMERA = 200;private int mType = 0; //游戏难度private AlertDialog dialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);requestPermission();//动态获取权限mPopupView = View.inflate(this,R.layout.popupview_layout,null);mGridView =(GridView) findViewById(R.id.gv_xpuzzle_pic_list);mResPicID = new int[]{R.drawable.a1,R.drawable.a2,R.drawable.a3,R.drawable.a4,R.drawable.a5,R.drawable.a6,R.drawable.a7,R.drawable.a8,R.drawable.a9,R.drawable.a10,R.drawable.a11,R.drawable.a12,R.drawable.a13,R.drawable.a14,R.drawable.a15};Bitmap[] bitmaps = new Bitmap[mResPicID.length];for(int i=0; i<bitmaps.length; i++){bitmaps[i] = BitmapFactory.decodeResource(getResources(),mResPicID[i]);mPicList.add(bitmaps[i]);}GirdViewAdapter adapter = new GirdViewAdapter( MainGame.this,mPicList);mGridView.setAdapter(adapter);mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {if(position == mResPicID.length-1){//选择本地图库还是相机showDialogCustom();}else {Intent intent = new Intent(MainGame.this,PuzzleActivity.class);intent.putExtra("picSelectedID",mResPicID[position]);intent.putExtra("mType",mType);startActivity(intent);}}});TEMP_PATH = Environment.getDownloadCacheDirectory().getPath()+"temp.png";}/*** 打开本地图库还是相机*/private void showDialogCustom() {AlertDialog.Builder builder = new AlertDialog.Builder(this);View rootView = View.inflate(MainGame.this,R.layout.dialoglayout,null);//自定义布局文件//TODO 这里可以火族组件子控件Button camera_btn = (Button) rootView.findViewById(R.id.camera_btn);Button gallery_btn = (Button) rootView.findViewById(R.id.gallery_btn);Button cancel_btn = (Button) rootView.findViewById(R.id.cancel_btn);camera_btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) { //打开相机Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);Uri photoUri = Uri.fromFile(new File(TEMP_PATH));intent.putExtra(MediaStore.EXTRA_OUTPUT,photoUri);startActivityForResult(intent,RESULT_CAMERA);}});gallery_btn.setOnClickListener(new View.OnClickListener() { //打开图库@Overridepublic void onClick(View view) {Intent intent = new Intent(Intent.ACTION_PICK);intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,IMAGE_TYPE);startActivityForResult(intent,RESULT_IMAGE);}});cancel_btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {dialog.dismiss(); //隐藏}});dialog = builder.create();dialog.setView(rootView,10,10,10,10);//将view设置给dialogdialog.show(); //显示}/*** 动态获取权限*/private void requestPermission(){int permission = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);if(permission == PackageManager.PERMISSION_GRANTED){requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},0);}}
}

同时需要获取权限

Manifest.permission.WRITE_EXTERNAL_STORAGE

展示:

GridView网格视图的使用相关推荐

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

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

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

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

  3. GridView(网格视图)

    GridView 是按照行列的方式来显示内容的,一般用于显示图片列表,比如九宫格列表,使用 GridView实现起来很简单.GridView 的用法与ListView 类似,首先看图2-36,效果图中 ...

  4. Android -- 下拉列表、列表视图、网格视图

    下拉框 -- 文本 Spinner 用于从一串列表中选择某项,功能类似于单选按钮的组合 下拉列表的展示 方式有两种,一种是在当前下拉框的正下方弹出列表框,此时要把spinnerMode属性设置为 dr ...

  5. 高级控件——列表类视图——网格视图GridView

    ======================================================================================= 布局: <Line ...

  6. Android 网格视图GridView

    GridView的视图排列方式与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要显示时,可以使用GirdView.既然有多个元素要显示,就需要使用BaseAdapter来存储这些元素.用户可能 ...

  7. 安卓学习笔记23:常用控件 - 网格视图与图像切换器

    文章目录 零.学习目标 一.网格视图 (一)概述 (二)继承关系图 (三)常用属性 二.图像切换器 (一)概述 (二)继承关系图 三.案例演示 - 选择水果 (一)运行效果 (二)涉及知识点 (三)实 ...

  8. 学习笔记(五)——数据适配器、数据表、数据网格视图控件的综合应用。

    学习笔记(五)--数据适配器.数据表.数据网格视图控件的综合应用. 1.  批量修改 修改包括增加,删除以及更新3个操作,所以声明实力化3个SQL命令分别应用于插入,删除以及修改 将声明的SQL命令连 ...

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

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

最新文章

  1. Asp.Net 上传大文件专题(3)--从请求流中获取数据并保存为文件[下]
  2. python手机版怎么运行项目或脚本-python可以在手机上运行吗
  3. 老李分享:Web Services 组件 2
  4. 47、Power Query-处理典型的中国式二维表格转一维
  5. 来自开发者的点赞!网易云信揽获3大技术奖项
  6. 算法导论8.3-4习题解答(基数排序)
  7. SpringCloud Zuul(一)之介绍
  8. 使用wrapper将java程序注册程windows服务后不生效
  9. 如何掌握所有的程序设计语言?
  10. Java 中关键字transient引出序列化与反序列化
  11. mysql md 123456_MySQL修炼之路四
  12. 树莓派学习2-连接蓝牙音箱进行语音播放
  13. Sublime text3 Version 3... 3207 激活码许可证(2019-07-19亲测有效)
  14. Protect the self: defense mechanisms in action
  15. 美国CN2服务器推荐:RAKsmart电信Cn2 GIA直连服务器
  16. Mysql 查询患某种疾病的患者
  17. Mysql免安装版下载以及配置
  18. 如何快速高效的刷Leetcode
  19. GRU(Gate Recurrent Unit,门控循环单元)结构
  20. IDEA自带插件的实体生成详细教程,离线情况下如何导入MySQL的驱动

热门文章

  1. Le le's picture when aged 5 monthes old_拔剑-浆糊的传说_新浪博客
  2. pgadmin mac卸载_Mac软件卸载——安全彻底地在Mac上卸载Microsoft Outlook - Mac迪迪卫...
  3. 基于SpringBoot下使用分布式文件存储FastDFS
  4. 转换接头PL8000V-B 0-70MPa
  5. win10 开机无法自动连接或重启才能连接WIFI的简单解决方法/2022.03
  6. html转pdf之使用Paged.js加页眉页脚
  7. 经典算法题型(二):二维数组(平面地图)的递归操作
  8. pdf怎么删除其中一页与添加新页面
  9. 赛尔号对战c语言程序,赛尔号计算解析系列文章(第一期)
  10. Mac下编写C或C++