2012-04-26 119 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->);