完整Demo链接:https://pan.baidu.com/s/1d_G9aCwBxpiYQcdQhwSDDw,提取码:5deh

效果图

activity_main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <GridView xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/gvMovie"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:horizontalSpacing="2dp"
  7. android:numColumns="2"
  8. android:verticalSpacing="2dp" />

MainActivity.java

  1. package com.bu_ish.grid_view_demo;
  2.  
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.os.Bundle;
  5. import android.widget.GridView;
  6.  
  7. import java.util.ArrayList;
  8.  
  9. public class MainActivity extends AppCompatActivity {
  10. private GridView gvMovie;
  11.  
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. gvMovie = findViewById(R.id.gvMovie);
  17. ArrayList<Movie> movies = new ArrayList<>();
  18. movies.add(new Movie("刀", "https://gss1.bdstatic.com/9vo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike80%2C5%2C5%2C80%2C26/sign=0bdb508d4c90f60310bd9415587bd87e/ac345982b2b7d0a28dadd821cdef76094b369a22.jpg", "赵文卓"));
  19. movies.add(new Movie("破坏之王", "https://gss0.bdstatic.com/94o3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike150%2C5%2C5%2C150%2C50/sign=9bf1fbb98f5494ee932f074b4c9c8b9b/241f95cad1c8a786a13830086409c93d70cf50a1.jpg", "周星驰"));
  20. movies.add(new Movie("第一滴血3", "https://gss2.bdstatic.com/-fo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=1f2bd403df1373f0e13267cdc566209e/d52a2834349b033b95ddb0a21bce36d3d539bd75.jpg", "史泰龙"));
  21. movies.add(new Movie("杀手之王", "https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike80%2C5%2C5%2C80%2C26/sign=526d4c9c337adab429dd1311eabdd879/adaf2edda3cc7cd92764cb6d3c01213fb80e913d.jpg", "李连杰"));
  22. movies.add(new Movie("我是谁", "https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=1944c477cfea15ce55e3e85bd7695196/7e3e6709c93d70cf21b800fffedcd100bba12b85.jpg", "成龙"));
  23. gvMovie.setAdapter(new MovieGridViewAdapter(this, movies));
  24. }
  25. }

item_movie.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="300dp">
  6.  
  7. <ImageView
  8. android:id="@+id/ivThumbnail"
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent"
  11. android:scaleType="fitXY"
  12. tools:src="@mipmap/ic_launcher" />
  13.  
  14. <LinearLayout
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:layout_gravity="bottom|center_horizontal"
  18. android:layout_marginBottom="20dp"
  19. android:gravity="center"
  20. android:orientation="vertical">
  21.  
  22. <TextView
  23. android:id="@+id/tvName"
  24. android:layout_width="wrap_content"
  25. android:layout_height="wrap_content"
  26. android:background="@drawable/movie_text_view_background"
  27. android:paddingLeft="5dp"
  28. android:paddingTop="5dp"
  29. android:paddingRight="5dp"
  30. android:paddingBottom="5dp"
  31. android:textColor="@android:color/white"
  32. tools:text="断刀客" />
  33.  
  34. <TextView
  35. android:id="@+id/tvStarring"
  36. android:layout_width="wrap_content"
  37. android:layout_height="wrap_content"
  38. android:layout_marginTop="5dp"
  39. android:background="@drawable/movie_text_view_background"
  40. android:paddingLeft="5dp"
  41. android:paddingTop="5dp"
  42. android:paddingRight="5dp"
  43. android:paddingBottom="5dp"
  44. android:textColor="@android:color/white"
  45. tools:text="主演:赵文卓" />
  46. </LinearLayout>
  47. </FrameLayout>

movie_text_view_background.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android">
  3. <solid android:color="#55000000" />
  4. <corners android:radius="5dp" />
  5. </shape>

MovieGridViewAdapter.java

  1. package com.bu_ish.grid_view_demo;
  2.  
  3. import android.content.Context;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.BaseAdapter;
  8. import android.widget.ImageView;
  9. import android.widget.TextView;
  10.  
  11. import com.bumptech.glide.Glide;
  12.  
  13. import java.util.List;
  14.  
  15. public class MovieGridViewAdapter extends BaseAdapter {
  16. private Context context;
  17. private List<Movie> movies;
  18.  
  19. public MovieGridViewAdapter(Context context, List<Movie> movies) {
  20. this.context = context;
  21. this.movies = movies;
  22. }
  23.  
  24. @Override
  25. public int getCount() {
  26. return movies.size();
  27. }
  28.  
  29. @Override
  30. public Movie getItem(int position) {
  31. return movies.get(position);
  32. }
  33.  
  34. @Override
  35. public long getItemId(int position) {
  36. return 0;
  37. }
  38.  
  39. @Override
  40. public View getView(int position, View convertView, ViewGroup parent) {
  41. ViewHolder viewHolder;
  42. if (convertView == null) {
  43. convertView = LayoutInflater.from(context).inflate(R.layout.item_movie, parent, false);
  44. viewHolder = new ViewHolder(convertView);
  45. convertView.setTag(viewHolder);
  46. } else {
  47. viewHolder = (ViewHolder) convertView.getTag();
  48. }
  49. Movie movie = movies.get(position);
  50. Glide.with(context).load(movie.getThumbnail()).into(viewHolder.ivThumbnail);
  51. viewHolder.tvName.setText(movie.getName());
  52. viewHolder.tvStarring.setText(movie.getStarring());
  53. return convertView;
  54. }
  55.  
  56. private class ViewHolder {
  57. private ImageView ivThumbnail;
  58. private TextView tvName, tvStarring;
  59.  
  60. public ViewHolder(View itemView) {
  61. ivThumbnail = itemView.findViewById(R.id.ivThumbnail);
  62. tvName = itemView.findViewById(R.id.tvName);
  63. tvStarring = itemView.findViewById(R.id.tvStarring);
  64. }
  65. }
  66. }

Android笔记之GridView的更多相关文章

  1. Android学习笔记之GridView的使用具体解释

    (1)创建布局代码例如以下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quo ...

  2. Android笔记(二十二) Android中的GridView

    GridView和ListView一样,是Android中比较常见的布局控件,譬如我们的手机桌面其实就是一个GridView. 效果: 实现过程和ListView类似,也是通过Adapter将数据源展 ...

  3. Android 网格视图GridView的使用

    网格视图GridView的排列方式与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要按矩阵格式进行显示时,就可以使用GridView控件来实现. 本文将以一个具体的实例来说明如何使用GridV ...

  4. Android listview和gridview以及view的区别

    GridView 可以指定显示的条目的列数. listview一般显示的条目的列数都是一列 如果是列表(单列多行形式)的使用ListView,如果是多行多列网状形式的优先使用GridView andr ...

  5. Android中使用GridView和ImageViewSwitcher实现电子相册简单功能

    我们在手机上查看相册时,首先看到的是网格状的图片展示界面,然后我们选择想要欣赏的照片点击进入,这样就可以全屏观看该照片,并且可以通过左右滑动来切换照片.如下图的显示效果: 首先我们先罗列一下本次实现所 ...

  6. Android控件Gridview实现仿支付宝首页,Fragment底部按钮切换和登录圆形头像

    此案例主要讲的是Android控件Gridview(九宫格)完美实现仿支付宝首页,包含添加和删除功能:Fragment底部按钮切换的效果,包含四个模块,登录页面圆形头像等,一个小项目的初始布局. 效果 ...

  7. Android网格视图(GridView)

    GridView的一些属性: 1.android:numColumns=”auto_fit”   //GridView的列数设置为自动,也可以设置成2.3.4…… 2.android:columnWi ...

  8. Android笔记——Android中数据的存储方式(二)

    我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...

  9. Android入门之GridView(表格控件)

    GridView是一个表格控件,可以在每个单元格中显示自定义的View或者字符串.在这里我们要实现一个图标下方有文字的效果. 1.首先我们应自定义布局文件image_text.xml.代码如下: &l ...

随机推荐

  1. Linux学习之二十-Linux文件系统

    Linux文件系统 文件系统的定义 文件系统是操作系统的必备软件,文件系统是对一个存储设备上的数据(block)和元数据(inode)进行组织的一种机制.文件系统可以帮助用户管理磁盘空间,进行文件的快 ...

  2. 转:100.64. 开头IP地址问题

    100.64. 开头IP地址问题 姚洪楼 发表于 学习备忘录 分类,标签: 电信 08二月2015 0 之前调试过一个路由器在成功设置DDNS的情况下外网依旧无法访问的情况,当时没有多想什么,一直以为 ...

  3. Win7 Visual Studio 2008如何注册

    默认是90天试用   在控制面板中卸载程序,然后找到VS2008,点击卸载/更改   到这一步就不要动了   去下载并运行CrackVS2008ForWindows7,然后点击右上角的Bug微软,弹出 ...

  4. Splay树(多操作)——POJ 3580 SuperMemo

    相应POJ题目:点击打开链接 SuperMemo Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 11309   Accept ...

  5. C++ 模板详解(二)(转)

    四.类模板的默认模板类型形参 1.可以为类模板的类型形参提供默认值,但不能为函数模板的类型形参提供默认值.函数模板和类模板都可以为模板的非类型形参提供默认值. 2.类模板的类型形参默认值形式为:tem ...

  6. Android--Handler的用法:在子线程中更新界面

    本文主要介绍Android的Handler的用法.Handler能够发送Messsage和Runnable对象到与其相关联的线程的消息队列. 每一个Handler对象与创建它的线程相关联.而且每一个H ...

  7. 用python做自己主动化測试--绘制系统性能趋势图和科学计算

    在性能測试中.我们常常须要画出CPU memory 或者IO的趋势图. 预计大学里.大多数人都学习过matlib, 领略了matlib绘图的强大. python提供了强大的绘图模块matplotlib ...

  8. Eclipse.ini参数设置

    最近Eclipse不知道是由于项目过多还是其他原因导致Eclipse进程容易卡死,一卡死Workspace保存出错,项目就全都不见了,又得重新导入...鉴于此原因,自己也上网查询了相关资料,现整理如下 ...

  9. Android应用程序开发以及背后的设计思想深度剖析

    1 http://www.uml.org.cn/mobiledev/201211063.asp 2 ...

  10. 利用nginx搭建https服务器

    一.HTTPS简介 HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块.服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加 ...