2012-04-26 75 views
2

我想用水平滚动在一列的gridview中显示图像缩略图。我玩过很多参数,但我无法弄清楚我做错了什么。请有人帮助我。 的main.xml:在GridView中的水平滚动android

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

回答

0

支票本,...

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

你永远不希望把一个的ListView/GridView的滚动型内。 – 2013-02-25 18:38:31

+0

其工作只为单列。我尝试了8列,但没有工作。 – 2013-08-16 11:10:41

-1

尝试这个代码

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

让我知道如果这个解决方案工作.. – sush 2012-04-26 11:03:35

+0

这段代码是我的。我测试过它,但没有工作horizo​​ntalview – azad 2012-04-26 13:24:05

+0

是的,我修改了你的代码本身,它为我工作..做了适配器构造函数的更改并将结果从活动传递到适配器 – sush 2012-04-27 04:33:03

0

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

+1

在做这件事之前,请注意这里的第二段:http://developer.android.com/reference/android/widget/Horizo​​ntalScrollView.html – Trevor 2012-06-12 20:35:47

0

如果你没有大量的图片来显示你可以尝试这样的事:

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