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

作者:风吹起如花般细碎流年 时间:2021-07-28 17:40:43 

本文实例为大家分享了Android使用Gridview单行横向滚动显示的具体代码,供大家参考,具体内容如下

要想实现滚动显示,layout布局里必须要使用HorizontalScrollView,才能实现横向滑动,但HorizontalScrollView标签里要嵌套一个LinearLayout布局

activity_main.xml,如下:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
android:weightSum="2" >

<HorizontalScrollView
 android:id="@+id/horizontal_scrollview"
 android:layout_height="0dp"
 android:layout_width="fill_parent"
 android:layout_weight="1"
 android:layout_gravity="center"
 android:background="@android:color/darker_gray"
 android:scrollbars="none">
  <LinearLayout
   android:layout_height="match_parent"
   android:layout_width="match_parent"
   android:orientation="horizontal">
    <GridView
     android:id="@+id/test_gridview"
     android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"/>
  </LinearLayout>
</HorizontalScrollView>
</LinearLayout>

gridview中的item的布局如下:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="80dp"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
 android:id="@+id/item_img"
 android:layout_width="60dp"
 android:layout_height="60dp"
 android:layout_gravity="center_horizontal"
 android:scaleType="fitXY"
 android:background="#00000000"/>
<TextView
 android:id="@+id/item_text"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:gravity="center_horizontal"
 android:textSize="20dp"
 android:text="233"
 android:textColor="@android:color/white"/>
</LinearLayout>

实现类如下:


package com.example.scrollgridview;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {

private GridView gridview;
private int imgs[]={R.drawable.remote_tv_0,
  R.drawable.remote_tv_1,R.drawable.remote_tv_2,
  R.drawable.remote_tv_3,R.drawable.remote_tv_4,
  R.drawable.remote_tv_5,R.drawable.remote_tv_6,
  R.drawable.remote_tv_7,R.drawable.remote_tv_8,
  R.drawable.remote_tv_9};
private GridviewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 gridview = (GridView)findViewById(R.id.test_gridview);
 adapter = new GridviewAdapter();

DisplayMetrics dm = new DisplayMetrics();
 getWindowManager().getDefaultDisplay().getMetrics(dm);
 float density = dm.density;
 int size = imgs.length;//要显示数据的个数
 //gridview的layout_widht,要比每个item的宽度多出2个像素,解决不能完全显示item的问题
 int allWidth = (int) (82 * size * density);
 //int allWidth = (int) ((width / 3 ) * size + (size-1)*3);//也可以这样使用,item的总的width加上horizontalspacing
 int itemWidth = (int) (80 * density);//每个item宽度
 LinearLayout.LayoutParams params = new  
 LinearLayout.LayoutParams(allWidth,LinearLayout.LayoutParams.MATCH_PARENT);
 gridview.setLayoutParams(params);
 gridview.setColumnWidth(itemWidth);
 gridview.setHorizontalSpacing(3);
 gridview.setStretchMode(GridView.NO_STRETCH);
 gridview.setNumColumns(size);

gridview.setAdapter(adapter);
 adapter.setindex(0);
 adapter.notifyDataSetChanged();

gridview.setOnItemClickListener(new OnItemClickListener() {

@Override
  public void onItemClick(AdapterView<?> parent, View view,
    int position, long id) {
   // TODO Auto-generated method stub
   adapter.setindex(position);
   adapter.notifyDataSetChanged();
  }
 });
}

class GridviewAdapter extends BaseAdapter{
 private int index = 0;
 @Override
 public int getCount() {
  // TODO Auto-generated method stub
  return imgs.length;
 }

@Override
 public Object getItem(int position) {
  // TODO Auto-generated method stub
  return imgs[position];
 }

@Override
 public long getItemId(int position) {
  // TODO Auto-generated method stub
  return position;
 }

public void setindex(int index){
  this.index = index;
 }

@Override
 public View getView(int position, View convertView, ViewGroup parent) {
  // TODO Auto-generated method stub
  LayoutInflater mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  ViewHolder viewHolder;
  if (convertView == null) {
   convertView = mInflater.inflate(R.layout.gridview_itme, null);
   viewHolder = new ViewHolder();
   viewHolder.img = (ImageView)convertView.findViewById(R.id.item_img);
   viewHolder.text = (TextView)convertView.findViewById(R.id.item_text);
   convertView.setTag(viewHolder);
  }else{
   viewHolder = (ViewHolder)convertView.getTag();
  }
  if(this.index == position){
   convertView.setBackgroundResource(R.drawable.list_item_bg_focus);
  }
  else{
   convertView.setBackgroundResource(R.drawable.list_item_bg);
  }
  viewHolder.img.setImageResource(imgs[position]);
  viewHolder.text.setText(position+"");
  return convertView;
 }

class ViewHolder{
  ImageView img;
  TextView text;
 }
}

}

代码下载地址:AndroidGridviewScroll(jb51.net).rar

来源:https://blog.csdn.net/gaoxiaomin123456/article/details/49616109

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

猜你喜欢

  • C#实现图像锐化的方法

    2023-07-23 01:08:21
  • C#实现DataTable映射成Model的方法(附源码)

    2023-03-12 06:10:56
  • springboot @ConditionalOnMissingBean注解的作用详解

    2021-11-27 09:33:59
  • App内切换语言详解

    2023-04-12 11:21:44
  • 如何用C#实现SAGA分布式事务

    2022-11-29 20:34:49
  • C# 中 System.Index 结构体和 Hat 运算符(^)的使用示例

    2023-02-27 11:40:23
  • Mono for Android 实现高效的导航(Effective Navigation)

    2023-09-05 21:39:56
  • Android点击事件之多点触摸与手势识别的实现

    2022-10-12 05:12:28
  • Java多线程读写锁ReentrantReadWriteLock类详解

    2023-03-09 07:01:54
  • JAVA使用hutool工具实现查询树结构数据(省市区)

    2021-11-04 18:30:09
  • C#中委托、事件和回调的使用及说明

    2023-08-13 01:00:24
  • 基于Beanutils.copyProperties()的用法及重写提高效率

    2023-04-20 12:10:25
  • 关于Mybatis与JPA的优缺点说明

    2023-08-23 22:28:33
  • 使用C# Winform应用程序获取网页源文件的解决方法

    2023-02-01 10:56:28
  • Java+element实现excel的导入和导出

    2022-07-31 12:45:53
  • C++ 线程(串行 并行 同步 异步)详解

    2023-07-18 18:09:43
  • vc提示unexpected end of file found的原因分析

    2022-01-19 12:58:00
  • Android自定义scrollView实现顶部图片下拉放大

    2021-05-26 09:55:36
  • Kotlin 基础教程之异常

    2022-10-31 06:34:52
  • C#机器入门学习之判断日报是否合格详解

    2023-03-24 01:55:08
  • asp之家 软件编程 m.aspxhome.com