簡體   English   中英

在Android中的GridView中水平滾動

[英]Horizontal scroll in GridView in android

我想在一個列中使用水平滾動在gridview中顯示圖像縮略圖。 我玩了很多參數,但我無法弄清楚我做錯了什么。 請有人幫助我。 main.xml中:

    <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>

活動代碼:

//---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;
    }
} 

檢查一下,......

    <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>

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>

如果您沒有很多要顯示的圖像,可以嘗試這樣的方法:

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);
        }

    }
}

這里我有一個擴展Horizo​​ntalScrollView的視圖,我向它添加了一個linearLayout。

有一個名為addImages的函數,它將圖像的資源ID作為輸入來顯示它們。 您可以修改它以在internalWrapper添加任何視圖。

您可以將此視圖用作:

<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>

和活動

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

試試這段代碼

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;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM