Android GridView实现横向列表水平滚动

本文实例为大家分享了Android GridView实现横向列表水平滚动的具体代码,供大家参考,具体内容如下

有时候根据项目需要,使用可横向滑动的GridView。仅以该文记录一下,毕竟没什么技术含量。

1.主界面布局代码:activity_main.xml。设置android:numColumns=”auto_fit”是因为可以不定项的添加子项。

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

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

  <LinearLayout
   android:layout_width="wrap_content"
   android:layout_height="fill_parent">

   <view.gridviewdemo.AblGridView
    android:id="@+id/id_gridview_home"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:numColumns="auto_fit"
    android:scrollbars="none"
    android:stretchMode="spacingWidthUniform"/>
  </LinearLayout>
 </HorizontalScrollView>

</LinearLayout>

2.主界面GridView列表子项布局文件:home_gridview_item.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="wrap_content"
 android:layout_gravity="center"
 android:layout_margin="0dp"
 android:background="#ffffff"
 android:orientation="vertical">

 <ImageView
  android:id="@+id/id_iv_item"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_horizontal"
  android:layout_marginTop="10dp"
  android:gravity="center" />

 <TextView
  android:id="@+id/id_tv_item"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_horizontal"
  android:layout_marginTop="5dp"
  android:gravity="center"
  android:paddingBottom="10dp"
  android:text="标题文字"
  android:textSize="12sp" />
</LinearLayout>

3.java实现代码:MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.widget.GridView;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {
 AblGridView id_gridview_home;
 private int[] imgs = {R.mipmap.index1_nav_xc, R.mipmap.index1_nav_xc,
   R.mipmap.index1_nav_xc, R.mipmap.index1_nav_xc, R.mipmap.index1_nav_xc};
 private String[] titles = new String[]{"子项1", "子项2","子项3","子项4", "子项5"};
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  id_gridview_home= (AblGridView) findViewById(R.id.id_gridview_home);
  setGridView();
 }

 /**设置GirdView参数,绑定数据*/
 private void setGridView() {
  int size = imgs.length;
  int length = 100;
  DisplayMetrics dm = new DisplayMetrics();
  getWindowManager().getDefaultDisplay().getMetrics(dm);
  float density = dm.density;
  int gridviewWidth = (int) (size * (length + 4) * density);
  int itemWidth = (int) (length * density);
  LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    gridviewWidth, LinearLayout.LayoutParams.FILL_PARENT);
  id_gridview_home.setLayoutParams(params); // 设置GirdView布局参数,横向布局的关键
  id_gridview_home.setColumnWidth(itemWidth); // 设置列表项宽
  id_gridview_home.setHorizontalSpacing(5); // 设置列表项水平间距
  id_gridview_home.setStretchMode(GridView.NO_STRETCH);
  id_gridview_home.setNumColumns(size); // 设置列数量=列表集合数
  AblGridViewBaseAdapter adapter = new AblGridViewBaseAdapter(this,imgs,titles);
  id_gridview_home.setAdapter(adapter);
 }
}

4.自定义控件:AblGridView

import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;

/**
 * 继承GridView控件,为了更友好的显示
 * 解决在scrollview中只显示第一行数据的问题
 */
public class AblGridView extends GridView {
 public AblGridView(Context context, AttributeSet attrs) {
  super(context, attrs);
 }

 public AblGridView(Context context) {
  super(context);
 }

 public AblGridView(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
 }

 @Override
 public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
    MeasureSpec.AT_MOST);
  super.onMeasure(widthMeasureSpec, expandSpec);
 }

}

5.重写适配器:AblGridViewBaseAdapter

import android.content.Context;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * 重写适配器
 */
public class AblGridViewBaseAdapter extends BaseAdapter {

 private Context mContext;
 private String[] Title;//显示标题数组
 private int[] Imgs;//显示图标数组

 public AblGridViewBaseAdapter(Context mContext,int[] imgs ,String[] titles) {
  super();
  this.mContext = mContext;
  Title = titles;
  Imgs = imgs;
 }

 @Override
 public int getCount() {
  return Title.length;
 }

 @Override
 public Object getItem(int position) {
  return position;
 }

 @Override
 public long getItemId(int position) {
  return position;
 }

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
  convertView = loadHomeHyOrYs(position, convertView, parent);
  return convertView;
 }

 /**
  * 加载会员或医生的功能列表
  */
 public View loadHomeHyOrYs(int position, View convertView, ViewGroup parent) {
  if (convertView == null) {
   convertView = LayoutInflater.from(mContext).inflate(
     R.layout.home_gridview_item, parent, false);
  }
  TextView tv = get(convertView, R.id.id_tv_item);
  ImageView iv = get(convertView, R.id.id_iv_item);
  iv.setBackgroundResource(Imgs[position]);
  tv.setText(Title[position]);
  return convertView;
 }

 public <T extends View> T get(View view, int id) {
  SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
  if (viewHolder == null) {
   viewHolder = new SparseArray<View>();
   view.setTag(viewHolder);
  }
  View childView = viewHolder.get(id);
  if (childView == null) {
   childView = view.findViewById(id);
   viewHolder.put(id, childView);
  }
  return (T) childView;
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android GridView实现滚动到指定位置的方法

    当一个列表项目很多,并且每个项目可以进入到其它Activity或者Fragment时,保存之前列表的位置是一个比较不错的功能, 今天研究了一下怎么保存浏览位置,发现GridView和它的父类中有4个相关的方法: 复制代码 代码如下: public void smoothScrollToPosition (int position) 滚动到position指定的位置,api level 11之下可用 *当你滚动完后,返回列表,能正常滚动,但是你再次从列表的项目返回后,滚动失效,就是只能滚动一次,我

  • Android通过实现GridView的横向滚动实现仿京东秒杀效果

    实现GridView的横向滚动 效果如下图: 具体实现的代码 •1. 主界面布局代码:activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"

  • Android控件gridview实现单行多列横向滚动效果

    本文实例为大家分享了安卓实现单行多列横向滚动,供大家参考,具体内容如下 <GridLayout android:layout_width="match_parent" android:layout_height="match_parent" android:columnCount="1" > <HorizontalScrollView android:layout_width="match_parent" a

  • Android中实现多行、水平滚动的分页的Gridview实例源码

    功能要求: (1)比如每页显示2X2,总共2XN,每个item显示图片+文字(点击有链接). 如果单行水平滚动,可以用Horizontalscrollview实现. 如果是多行水平滚动,则结合Gridview(一般是垂直滚动的)和Horizontalscrollview实现. (2)水平滚动翻页,下面有显示当前页的icon. 1.实现自定义的HorizontalScrollView(HorizontalScrollView.java): 因为要翻页时需要传当前页给调用者,所以fling函数中自己

  • Android开发实现横向列表GridView横向滚动的方法【附源码下载】

    本文实例讲述了Android开发实现横向列表GridView横向滚动的方法.分享给大家供大家参考,具体如下: Android 横向列表实现,可左右滑动,如下图 1. 主界面布局代码:activity_main.xml a.包裹HorizontalScrollView控件是GirdView横向滚动的基本条件 b.GirdView外包裹LinearLayout是java代码中参数设置的必要条件 <?xml version="1.0" encoding="utf-8"

  • Android使用Gridview单行横向滚动显示

    本文实例为大家分享了Android使用Gridview单行横向滚动显示的具体代码,供大家参考,具体内容如下 要想实现滚动显示,layout布局里必须要使用HorizontalScrollView,才能实现横向滑动,但HorizontalScrollView标签里要嵌套一个LinearLayout布局 activity_main.xml,如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu

  • 详解Android使GridView横向水平滚动的实现方式

    Android为我们提供了竖直方向的滚动控件GridView,但如果我们想让它水平滚动起来,就需要自己实现了. 以下使用的测试数据datas集合都为List<ResolveInfo>类型,用来存储手机中的所有App public static List<ResolveInfo> getAppData(Context context) { PackageManager packageManager = context.getPackageManager(); Intent mainI

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

    本文实例为大家分享了Android使用GridView实现横向滚动效果的具体代码,供大家参考,具体内容如下 第一次做横向滑动,看了一些列子,基本就2总:HorizontalListView和GridView.考虑的了下选择用比较熟的GridView,并且在2种方案都使用过,根据本人实际情况,采用了更适合的GridView. 也希望看过这篇博客的大神们,能指点下HorizontalListView和GridView两个方案的优缺点. 思路: XML界面:用HorizontalScrollView

  • Android GridView实现横向列表水平滚动

    本文实例为大家分享了Android GridView实现横向列表水平滚动的具体代码,供大家参考,具体内容如下 有时候根据项目需要,使用可横向滑动的GridView.仅以该文记录一下,毕竟没什么技术含量. 1.主界面布局代码:activity_main.xml.设置android:numColumns="auto_fit"是因为可以不定项的添加子项. <?xml version="1.0" encoding="utf-8"?> <

  • Android使用HorizontalScrollView实现水平滚动

    HorizontalScrollView 和 ScrollView 都是由 FrameLayout 派生出来的.它们就是一个用于为普通组件添加滚动条的组件.且 HorizontalScrollView 和 ScrollView 里面最多只能包含一个组件(当然组件里面还可以嵌套组件).它们不同的是 HorizontalScrollView 用于添加水平滚动,而 ScrollView 用于添加垂直滚动. 突然间想到 做一个屏幕下方水平滑动,屏幕上方并作出相应的反应的效果.只是在下方滚动时,屏幕上方没

  • Android开发实现自定义水平滚动的容器示例

    本文实例讲述了Android开发实现自定义水平滚动的容器.分享给大家供大家参考,具体如下: public class HorizontalScrollView extends ViewGroup { //手势 private GestureDetector mGestureDetector; private HorizontalScroller mScroller; private int curID; //快速滑动 private boolean isFlying; //--回调函数-----

  • Android使用Recyclerview实现图片水平自动循环滚动效果

    简介: 本篇博客主要介绍的是如何使用RecyclerView实现图片水平方向自动循环(跑马灯效果) 效果图:  思路: 1.准备m张图片 1.使用Recyclerview实现,返回无数个(实际Interge.MAXVALUE)item,第n个item显示第n%m张图片 3.使用recyclerview.scrollBy  每个一段时间水平滚动一段距离 4.通过layoutManager.findFirstVisibleItemPosition()获取当前显示的第一个View是第几个item,上面

随机推荐