GridView网格视图的使用
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网格视图的使用相关推荐
- ASP.NET中 DropDownList+GridView(网格视图)的使用前台绑定[高]
ylbtech-ASP.NET-Control-Bind:DropDownList+GridView(网格视图)的使用前台绑定[高] ASP.NET中 DropDownList+GridView(网格 ...
- UI组件之AdapterView及其子类(二)GridView网格视图的使用
GridView网格视图属性: android:numColumns="auto_fit" --------列数设置为自动,可以为确定的数值 android:columnWidth ...
- GridView(网格视图)
GridView 是按照行列的方式来显示内容的,一般用于显示图片列表,比如九宫格列表,使用 GridView实现起来很简单.GridView 的用法与ListView 类似,首先看图2-36,效果图中 ...
- Android -- 下拉列表、列表视图、网格视图
下拉框 -- 文本 Spinner 用于从一串列表中选择某项,功能类似于单选按钮的组合 下拉列表的展示 方式有两种,一种是在当前下拉框的正下方弹出列表框,此时要把spinnerMode属性设置为 dr ...
- 高级控件——列表类视图——网格视图GridView
======================================================================================= 布局: <Line ...
- Android 网格视图GridView
GridView的视图排列方式与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要显示时,可以使用GirdView.既然有多个元素要显示,就需要使用BaseAdapter来存储这些元素.用户可能 ...
- 安卓学习笔记23:常用控件 - 网格视图与图像切换器
文章目录 零.学习目标 一.网格视图 (一)概述 (二)继承关系图 (三)常用属性 二.图像切换器 (一)概述 (二)继承关系图 三.案例演示 - 选择水果 (一)运行效果 (二)涉及知识点 (三)实 ...
- 学习笔记(五)——数据适配器、数据表、数据网格视图控件的综合应用。
学习笔记(五)--数据适配器.数据表.数据网格视图控件的综合应用. 1. 批量修改 修改包括增加,删除以及更新3个操作,所以声明实力化3个SQL命令分别应用于插入,删除以及修改 将声明的SQL命令连 ...
- Android应用开发—通用的GridView网格分割线
注:本文基于 Android RecyclerView 使用完全解析 体验艺术般的控件 中关于GridView网格分割线部分代码扩展而来. 原接口代码: import android.content. ...
最新文章
- Asp.Net 上传大文件专题(3)--从请求流中获取数据并保存为文件[下]
- python手机版怎么运行项目或脚本-python可以在手机上运行吗
- 老李分享:Web Services 组件 2
- 47、Power Query-处理典型的中国式二维表格转一维
- 来自开发者的点赞!网易云信揽获3大技术奖项
- 算法导论8.3-4习题解答(基数排序)
- SpringCloud Zuul(一)之介绍
- 使用wrapper将java程序注册程windows服务后不生效
- 如何掌握所有的程序设计语言?
- Java 中关键字transient引出序列化与反序列化
- mysql md 123456_MySQL修炼之路四
- 树莓派学习2-连接蓝牙音箱进行语音播放
- Sublime text3 Version 3... 3207 激活码许可证(2019-07-19亲测有效)
- Protect the self: defense mechanisms in action
- 美国CN2服务器推荐:RAKsmart电信Cn2 GIA直连服务器
- Mysql 查询患某种疾病的患者
- Mysql免安装版下载以及配置
- 如何快速高效的刷Leetcode
- GRU(Gate Recurrent Unit,门控循环单元)结构
- IDEA自带插件的实体生成详细教程,离线情况下如何导入MySQL的驱动
热门文章
- Le le's picture when aged 5 monthes old_拔剑-浆糊的传说_新浪博客
- pgadmin mac卸载_Mac软件卸载——安全彻底地在Mac上卸载Microsoft Outlook - Mac迪迪卫...
- 基于SpringBoot下使用分布式文件存储FastDFS
- 转换接头PL8000V-B 0-70MPa
- win10 开机无法自动连接或重启才能连接WIFI的简单解决方法/2022.03
- html转pdf之使用Paged.js加页眉页脚
- 经典算法题型(二):二维数组(平面地图)的递归操作
- pdf怎么删除其中一页与添加新页面
- 赛尔号对战c语言程序,赛尔号计算解析系列文章(第一期)
- Mac下编写C或C++