Grid Square的彩色方块 - Android

时间:2011-07-23 23:25:51

标签: android gridview adapter relativelayout

我想制作一个包含随机彩色方块的GridView,我想将其放入RelativeLayout中,以便网格上方和下方的按钮可以改变网格的状态(即某些方块的颜色)。我无法弄清楚如何创建这些彩色方块并将它们放入网格中。

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gameLayout"
android:orientation="vertical" 
android:layout_width="fill_parent"
android:layout_height="fill_parent" 
>

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/colorGrid"
    android:layout_width="200dip" 
    android:layout_height="200dip"
    android:columnWidth="90dip"
    android:numColumns="auto_fit"
    android:verticalSpacing="0.0dip"
    android:horizontalSpacing="0.0dip"
    android:layout_centerHorizontal="true" />

<Button 
    android:id="@+id/redButton"
    android:layout_width="75dip"
    android:layout_height="75dip"
    android:text="RED"
    android:layout_centerHorizontal="true"
    android:layout_weight="1.0"
    android:layout_below="@id/colorGrid" />

<Button
    android:id="@+id/yellowButton"
    android:layout_width="75dip"
    android:layout_height="75dip"
    android:text="YELLOW"
    android:layout_weight="1.0"
    android:layout_centerHorizontal="true"
    android:layout_below="@id/redButton" />

<Button
    android:id="@+id/greenButton"
    android:layout_width="75dip"
    android:layout_height="75dip"
    android:text="GREEN"
    android:layout_weight="1.0"
    android:layout_toLeftOf="@id/redButton" 
    android:layout_below="@id/colorGrid" />

<Button
    android:id="@+id/lightBlueButton"
    android:layout_width="75dip"
    android:layout_height="75dip"
    android:text="LIGHT BLUE"
    android:layout_weight="1.0"
    android:layout_toRightOf="@id/redButton" 
    android:layout_below="@id/colorGrid" />

<Button
    android:id="@+id/darkBlueButton"
    android:layout_width="75dip"
    android:layout_height="75dip"
    android:text="DARK BLUE"
    android:layout_weight="1.0"
    android:layout_toLeftOf="@id/redButton" 
    android:layout_below="@id/redButton" />

<Button
    android:id="@+id/purpleButton"
    android:layout_width="75dip"
    android:layout_height="75dip"
    android:text="PURPLE"
    android:layout_weight="1.0"
    android:layout_toRightOf="@id/redButton" 
    android:layout_below="@id/redButton" />



</RelativeLayout>

我希望方块彼此相邻,这就是为什么我将网格中的垂直和水平间距减小到0。

我应该以编程方式创建这些方块并使用某种类型的适配器将它们添加到网格中吗?我只是需要帮助入门。谢谢!

我的适配器类代码:

import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

public class GameAdapter extends BaseAdapter{
private Context mContext;

public GameAdapter(Context c){
    mContext = c;
}

public int getCount() {

    return 10;
}

@Override
public Object getItem(int position) {

    return null;
}

@Override
public long getItemId(int position) {

    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;
    if(convertView==null){
        view=new View(mContext);
    }else{
        view = (View) convertView;
    }
    view.setBackgroundColor(Color.rgb((int)(Math.random()*255), (int)(Math.random()*255), (int)(Math.random()*255)));
    return view;
}

}

我的活动课程中的电话:

setContentView(R.layout.gamelayout);
GridView gridView = (GridView)findViewById(R.id.colorGrid);
gridView.setAdapter(new GameAdapter(TheActivity.this));

2 个答案:

答案 0 :(得分:1)

gridview已经返回了一个正方形网格。因此,您可以从适配器更改每个方块的颜色。

public int getCount() {

    return 10;
}

private int r,g,b;
r=Rand with bounds [0,255]
g=...
b=....

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


   View view;
    view=new ImageView(mContext);
    view.setBackgroundColor(Color.rgb(r, g, b));

return view;

答案 1 :(得分:0)

我知道这是一篇旧帖子,但也改变了弱线的适配器getView:

    public View getView(int position, View convertView, ViewGroup parent) {     
        if (convertView == null) {   
            convertView = new ImageView(context);
            convertView.setMinimumHeight(32);
            convertView.setMinimumWidth(32);

        }
        ((ImageView)convertView).setImageDrawable(new ColorDrawable((int) getItem(position)));
        return convertView;     
    }