Android使用GridView实现横向滚动效果

作者:LeArn淡然 时间:2022-01-29 13:32:16 

本文实例为大家分享了Android使用GridView实现横向滚动效果的具体代码,供大家参考,具体内容如下

第一次做横向滑动,看了一些列子,基本就2总:HorizontalListView和GridView。考虑的了下选择用比较熟的GridView,并且在2种方案都使用过,根据本人实际情况,采用了更适合的GridView。

也希望看过这篇博客的大神们,能指点下HorizontalListView和GridView两个方案的优缺点。

思路:

XML界面:用HorizontalScrollView + GridView 配合使用。
Java代码部分:和普通GridView使用基本一致,但需要手动设置GridView的width以及Item的Width等。

笔者实际情况是:左右滑动,1行以4个为基准。
在不同尺寸的平板下,呈现都是一个界面4个Item。

先上效果图

模拟器Nexus 10 API 18 2560x1600: xhdpi 效果如下:

Android使用GridView实现横向滚动效果

模拟器Nexus 9 API 18 2048x1536: xhdpi 效果如下:

Android使用GridView实现横向滚动效果

XML代码


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:gravity="center">

<HorizontalScrollView
   android:layout_width="match_parent"
   android:layout_height="wrap_content">

<LinearLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_margin="10dp">

<GridView
       android:id="@+id/dev_gv"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:numColumns="auto_fit"
       android:stretchMode="spacingWidthUniform">
     </GridView>

</LinearLayout>

</HorizontalScrollView>

</LinearLayout>

android:numColumns=”auto_fit” –>列数量自适应
android:stretchMode=”spacingWidthUniform” –>Item间距均匀

Java

这里是参考了网上他人的代码后,更具自己的实际情况进行更改,并附上了详细的注释。


/**
  * 水平GridView设置
  * @param size Item总数
  * @param gridView 需要设置的GridView
  */
 private void setHorizontalGridView(int size, GridView gridView) {
   int length = size;
   //一个界面要显示的几个Item
   int AnInterfaceNum=4;
   //每个Item的间距(注:如果间距过大,但屏幕宽度不够,多出的部份会被无视)
   int spcing = 30;
   //计算当个Item的宽度( 屏幕宽度 减去- 一个屏幕下要总item数量的间距之和 最后除/ 单个屏幕要显示几个Item)
   int itemWidth = ((getResources().getDisplayMetrics().widthPixels) - ((AnInterfaceNum - 1) * spcing)) / AnInterfaceNum;
   //这里笔者并不理解为什么网上有些代码这里需要用到屏幕密度,但会影响我最终效果,就注释掉
   //    float density = dm.density;
   //
   //    int gridviewWidth = (int) (size * (length) * density)+((size-1)*30);
   //    int itemWidth = (int) ((length) * density);
   //笔者更具实际情况改写如下:
   //GridView总长度
   int gridviewWidth = (length * (itemWidth)) + ((length - 1) * spcing);

@SuppressWarnings("deprecation")
   LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
       gridviewWidth, LinearLayout.LayoutParams.MATCH_PARENT);
   gridView.setLayoutParams(params);      // 设置GirdView布局参数,横向布局的关键
   gridView.setColumnWidth(itemWidth);     // 设置列表项宽
   gridView.setHorizontalSpacing(spcing);   // 设置列表项水平间距
   gridView.setStretchMode(GridView.NO_STRETCH);
   gridView.setNumColumns(length);       // 设置列数量=列表集合数

}

这块代码是核心部分,并不建议直接copy使用,建议先看懂后,再根据实际情况进行更改。

来源:https://blog.csdn.net/qq_35323561/article/details/81052940

标签:Android,GridView,滚动
0
投稿

猜你喜欢

  • C#异步执行任务的方法

    2022-02-27 15:02:41
  • Java Bean Validation使用示例详解

    2023-07-19 07:05:26
  • Android基础之使用Fragment控制切换多个页面

    2023-07-11 00:08:37
  • C#禁用双击窗体图标关闭窗体的方法

    2022-01-04 14:20:04
  • Android组件必学之TabHost使用方法详解

    2021-11-12 04:56:47
  • 详解Spring Boot 属性配置和使用

    2023-01-20 02:02:22
  • Android 应用启动欢迎界面广告的实现实例

    2023-01-26 07:34:11
  • Springboot打成war包并在tomcat中运行的部署方法

    2022-06-29 07:53:32
  • WPF如何利用附加属性修改ShowGridLines效果详解

    2023-04-01 06:32:04
  • Java类初始化和实例化中的2个“雷区”

    2021-12-13 00:48:18
  • 基于idea 的 Java中的get/set方法之优雅的写法

    2023-11-26 20:22:50
  • C#如何修改项目名图文详解

    2022-02-21 05:33:34
  • 用JAVA实现单链表,检测字符串是否是回文串

    2021-07-20 07:07:45
  • GSON实现Java对象与JSON格式对象相互转换的完全教程

    2023-11-23 09:23:37
  • Android单片机与蓝牙模块通信实例代码

    2023-02-21 17:21:05
  • Java超详细讲解设计模式之一的单例模式

    2023-03-09 10:59:09
  • C#实现顺序表(线性表)完整实例

    2022-06-04 15:42:31
  • Java下http下载文件客户端和上传文件客户端实例代码

    2021-09-09 16:52:11
  • java实现socket客户端连接服务端

    2021-12-02 03:52:07
  • Java for循环几种写法整理

    2023-09-12 01:25:58
  • asp之家 软件编程 m.aspxhome.com