2013-02-03 34 views
0

我有具有以下属性一个GridView:的Android gridview的streachmode = “columnWidth时”,设置项目的内容,以适应视图

<GridView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/PhoneImageGrid" 
     style="@style/PhotoGridLayout" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:alwaysDrawnWithCache="true" 
     android:clipChildren="true" 
     android:columnWidth="100dp" 
     android:horizontalSpacing="2dp" 
     android:numColumns="auto_fit" 
     android:padding="4dp" 
     android:scrollbars="none" 
     android:scrollingCache="true" 
     android:smoothScrollbar="true" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="4dp" /> 

这里是网格项:

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

    <ImageView 
     android:id="@+id/thumbImage" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

    <CheckBox 
     android:id="@+id/itemCheckBox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" /> 

</RelativeLayout> 

现在当我运行应用程序时,我得到了一个gridview,看起来一切正确的肖像,当我把它变成风景的宽度正在改变,但我想要项目的内容也按比例缩放根据新的列宽度( item_height = item_width =新的宽度)。我怎样才能做到这一点?谢谢

+0

得到了答案? –

回答

0

它有点棘手设置获取gridview col宽度。您可以将colview的宽度设置为col的宽度,并通知适配器的变化。 (从Android样品取代码:https://developer.android.com/training/displaying-bitmaps/index.html

这里的测量COL宽度的方式:

imagegrid.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       if (imageAdapter.getNumColumns() == 0) { 
        final int numColumns = (int) Math.floor(imagegrid.getWidth() 
          /(mImageThumbSize + mImageThumbSpacing)); 
        if (numColumns > 0) { 
         final int columnWidth = (imagegrid.getWidth()/numColumns) - mImageThumbSpacing; 
         imageAdapter.setNumColumns(numColumns); 
         imageAdapter.setItemHeight(columnWidth); 

        } 
       } 
      } 
     }); 

创建适配器这些方法:

public void setNumColumns(int numColumns) { 
      mNumColumns = numColumns; 
     } 

     public int getNumColumns() { 
      return mNumColumns; 
     } 

     public void setItemHeight(int height) { 
      if (height == mItemHeight) { 
       return; 
      } 
      mItemHeight = height; 
      mImageViewLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, mItemHeight); 
      // mImageFetcher.setImageSize(height); 
      notifyDataSetChanged(); 
     } 

设置初始图像大小:

mImageViewLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, 
         LayoutParams.MATCH_PARENT); 

下面是完整的适配器类:

public class ImageAdapter extends BaseAdapter { 
     private LayoutInflater mInflater; 
     private int mItemHeight = 0; 
     private int mNumColumns = 0; 
     private RelativeLayout.LayoutParams mImageViewLayoutParams; 

     public ImageAdapter() { 
      mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      mImageViewLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, 
        LayoutParams.MATCH_PARENT); 
     } 

     public void setNumColumns(int numColumns) { 
      mNumColumns = numColumns; 
     } 

     public int getNumColumns() { 
      return mNumColumns; 
     } 

     public void setItemHeight(int height) { 
      if (height == mItemHeight) { 
       return; 
      } 
      mItemHeight = height; 
      mImageViewLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, mItemHeight); 
      // mImageFetcher.setImageSize(height); 
      notifyDataSetChanged(); 
     } 

     public int getCount() { 
      return images.size(); 
     } 

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

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

     public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder; 
      if (convertView == null) { 
       holder = new ViewHolder(); 
       convertView = mInflater.inflate(R.layout.galleryitem, null); 
       holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage); 
       holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox); 

       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
      ImageItem item = images.get(position); 
      holder.imageview.setId(position); 

      // holder.imageview.setImageBitmap(item.img); 
      holder.imageview.setLayoutParams(mImageViewLayoutParams); 

      // Check the height matches our calculated column width 
      if (holder.imageview.getLayoutParams().height != mItemHeight) { 
       holder.imageview.setLayoutParams(mImageViewLayoutParams); 
      } 
      holder.imageview.setImageBitmap(item.img); 
      holder.checkbox.setChecked(item.selection); 
      return convertView; 
     } 
    } 
相关问题