android中GridView中的水平滚动

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10331583/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 03:19:39  来源:igfitidea点击:

Horizontal scroll in GridView in android

androidgridviewhorizontalscrollview

提问by azad

I want to display image thumbnails in a gridview in one column with a horizontal scroll. I have played with many parameters but I can't figure out what I am doing wrong. Kindly someone help me. main.xml:

我想在具有水平滚动的一列中的 gridview 中显示图像缩略图。我玩过很多参数,但我不知道我做错了什么。请有人帮助我。主文件:

    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <GridView
        android:layout_width="500dp"
        android:layout_height="400dp"
        android:id="@+id/grid"
        android:columnWidth="300dp"
        android:padding="5dp"
        android:horizontalSpacing="10dp"
        android:verticalSpacing="10dp"
        android:scrollbars="horizontal"
        android:stretchMode="spacingWidthUniform">
    </GridView>
</LinearLayout>

Activity Code:

活动代码:

//---the images to display---
Integer[] imageIDs = {
        R.drawable.library,
        R.drawable.library,
        R.drawable.library,
        R.drawable.library,
        R.drawable.library,
        R.drawable.library,
        R.drawable.library                   
};

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    GridView gridView = (GridView) findViewById(R.id.grid);
    gridView.setAdapter(new ImageAdapter(this));
    gridView.setNumColumns(imageIDs.length);

}

public class ImageAdapter extends BaseAdapter
{
    private Context context;

    public ImageAdapter(Context c)
    {
        context = c;
    }

    public int getCount() {
        return imageIDs.length;
    }

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

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

    public View getView(int position, View convertView, ViewGroup parent)
    {
        ImageView imageView;
        if (convertView == null) {
            imageView = new ImageView(context);
            imageView.setLayoutParams(new GridView.LayoutParams(100, 100));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        } else {
            imageView = (ImageView) convertView;
        }
        imageView.setImageResource(imageIDs[position]);
        return imageView;
    }
} 

回答by Basim Sherif

check this,...

检查这个,...

    <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:id="@+id/horizontalScrollView1" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content"
       android:fillViewport="true"
       android:scrollbars="none" >
    <GridView
        android:layout_width="500dp"
        android:layout_height="400dp"
        android:id="@+id/grid"
        android:columnWidth="300dp"
        android:padding="5dp"
        android:horizontalSpacing="10dp"
        android:verticalSpacing="10dp"
        android:scrollbars="horizontal"
        android:stretchMode="spacingWidthUniform">
    </GridView>
     </HorizontalScrollView>
</LinearLayout>

回答by sush

main.xml

主文件

<HorizontalScrollView 
   android:id="@+id/horizontalScrollView1" 
   android:layout_width="fill_parent" 
   android:layout_height="wrap_content"
   android:fillViewport="true"
   android:scrollbars="horizontal" >

<GridView
    android:layout_width="500dp"
    android:layout_height="400dp"
    android:id="@+id/grid"
    android:columnWidth="300dp"
    android:padding="5dp"
    android:horizontalSpacing="100dp"
    android:verticalSpacing="10dp"
    android:scrollbars="horizontal"
    android:stretchMode="spacingWidthUniform">
</GridView>
</HorizontalScrollView>

回答by vipul mittal

If you don't have a lot of images to display you can try something like this:

如果您没有很多图像要显示,您可以尝试这样的操作:

public class MyHorizontalView extends HorizontalScrollView {
    private LinearLayout internalWrapper;

    public StampsCustomView(Context context) {
        super(context, null);

    }

    public StampsCustomView(Context context, AttributeSet attr) {
        super(context, attr);

        setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT));
        setFadingEdgeLength(0);
        this.setHorizontalScrollBarEnabled(false);
        this.setVerticalScrollBarEnabled(false);

        internalWrapper = new LinearLayout(context);
        internalWrapper.setLayoutParams(new LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        internalWrapper.setOrientation(LinearLayout.HORIZONTAL);
        addView(internalWrapper);

    }

    public void addImages(int[] images) {
        internalWrapper.removeAllViews();
        for (int i = 0; i < images.length; i++) {
            ImageView iv = new ImageView(getContext());
            iv.setImageResource(images[i]);
            internalWrapper.addView(iv);
        }

    }
}

Here I have a view that extends HorizontalScrollView and I add a linearLayout to it.

在这里,我有一个扩展 Horizo​​ntalScrollView 的视图,并向其添加了一个 linearLayout。

There is a function called addImagesthat takes resource id's of images as input to display them. You can modify this to add any view or images in internalWrapper.

有一个函数被调用addImages,它将图像的资源 ID 作为输入来显示它们。您可以修改它以在 internalWrapper.

you can use this view as:

您可以将此视图用作:

<com.example.android.MyHorizontalView
            android:id="@+id/h_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="30dp"
            android:orientation="horizontal" >
        </com.example.android.MyHorizontalView>

and in activity

并在活动中

MyHorizontalView hView=(MyHorizontalView)findViewById(R.id.h_view);
hView.addImages(<-resource ids->);

回答by sush

try out this code

试试这个代码

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class Test2Activity extends Activity {   
    /** Called when the activity is first created. */   
     public Integer[] imageIDs = {   
                R.drawable.library,   
                R.drawable.library,   
                R.drawable.library,      
                R.drawable.library,      
                R.drawable.library,   
                R.drawable.library,           
                R.drawable.library                         
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            GridView gridView = (GridView) findViewById(R.id.grid);
            gridView.setAdapter(new ImageAdapter(this, imageIDs));
            gridView.setNumColumns(imageIDs.length);

    }

    class ImageAdapter extends BaseAdapter
    {
        private Context context;
        Integer[] imageIDs;

        public ImageAdapter(Context c, Integer[] imageIDResults)
        {
            context = c;
            imageIDs = imageIDResults;
        }

        public int getCount() {
            return imageIDs.length;
        }

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

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

        public View getView(int position, View convertView, ViewGroup parent)
        {
            ImageView imageView;
            if (convertView == null) {
                imageView = new ImageView(context);
                imageView.setLayoutParams(new GridView.LayoutParams(100, 100));
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            } else {
                imageView = (ImageView) convertView;
            }
            imageView.setImageResource(imageIDs[position]);
            return imageView;
        }
    }
}