2014-03-27 114 views
0

我已经为我的侄子创建了一个缩放,均匀间隔的gridview布局,用于一个简单的卡匹配游戏。它的表现几乎与我想要的一样,但似乎应该有一种不太复杂的方式来实现这一点,所以我想知道是否有人可以提出更好/更简单的方法。我是Android新品牌,所以我可能会过度设计这个。可扩展Gridview布局

我有一个设置来控制卡的数量(12-32),它可以扩展到任何尺寸的屏幕(各种尺寸和分辨率的平板电脑或手机)。

这里是我的gridview的XML:

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/gridview" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:numColumns="auto_fit" 
android:verticalSpacing="10dp" 
android:horizontalSpacing="10dp" 
android:stretchMode="columnWidth" 
android:gravity="center" 
android:background="@drawable/wood" 
android:layout_below="@id/score_board" 
android:layout_above="@+id/messageparent" 
/> 

我有BaseAdapter的ImageAdapter子类,具有getView看起来像这样。 getCellWidth和getCellHeight函数返回布局更改主要活动中设置的值(请参见下文)。

public View getView(int position, View convertView, ViewGroup parent) { 

    CardView imageView; 

    if (convertView == null) { // if it's not recycled, initialize some attributes 
     imageView = new CardView(mContext,position,mCardFaces[position]); //mThumbIds[position]  
     imageView.setLayoutParams(new GridView.LayoutParams(((MainActivity)mContext).getCellWidth(), ((MainActivity)mContext).getCellHeight())); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     //imageView.setPadding(R.dimen.card_padding, R.dimen.card_padding, R.dimen.card_padding, R.dimen.card_padding);      
     imageView.setPadding(8, 8, 8, 8); 
     imageView.setImageResource(CardView.CARDBACK); 
    } else { 
     imageView = (CardView) convertView; 

     //If we recycle an old view, make sure it resizes appropriately 
     if (imageView.getWidth() != ((MainActivity)mContext).getCellWidth()) { 
      imageView.setLayoutParams(new GridView.LayoutParams(((MainActivity)mContext).getCellWidth(), ((MainActivity)mContext).getCellHeight())); 
     } 

     if(!mCardFaces[position].equals(imageView.getResID())) 
      imageView.updateCard(mCardFaces[position]); 
    } 

    return imageView; 
} 

下面是我的sizeCardsToFit方法的相关代码:

//... algorithm to calc cols, width and height to fit screen 

gridview.setNumColumns(nCols); 
gridview.setColumnWidth(width); 

for (int i = 0; i < gridview.getChildCount(); i++) { 
    ((CardView)gridview.getChildAt(i)).setLayoutParams(new GridView.LayoutParams(width,height)); 
} 

mCellHeight=height; 
mCellWidth=width; 

回答

0
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/MyGrid" android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:padding="0dp" 
    android:verticalSpacing="2dp" android:horizontalSpacing="2dp" 
    android:scrollingCache="true" android:smoothScrollbar="true" 
    android:clipChildren="true" android:alwaysDrawnWithCache="true" 
    android:numColumns="auto_fit" android:columnWidth="100dp" 
    android:stretchMode="columnWidth" android:gravity="center_horizontal" 
    android:background="#000000"> 
</GridView>