我的目標是顯示一個棋盤。我有一個活動,它顯示一個菜單並加載一個擴展GridView的「ChessView」實例。我創建了一個自定義的GridView,因爲我希望有一個完全致力於其顯示的類。所以這個類有它自己的layout.xml等等Android的 - 自定義的GridView帶獨立XML
GameActivity.java:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
//init a game
CChess.getInstance().init();
//creating the chessboard
ChessView lChessView = (ChessView) findViewById(R.id.chessView);
}
activity_game.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context=".GameActivity" >
<project.chess.view.ChessView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ChessView" >
</project.chess.view.ChessView>
</RelativeLayout>
ChessView.java:
public class ChessView extends GridView {
public ChessView(Context pContext, AttributeSet pAttrs) {
super(pContext, pAttrs);
GridView.inflate(pContext, R.layout.view_chess, null);
this.setAdapter(new ChessAdapter(pContext));
}
}
view_chess.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<GridView
android:id="@+id/gridView"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:numColumns="8"
android:gravity="center"
>
</GridView>
</LinearLayout>
ChessAdapter.java:
public class ChessAdapter extends BaseAdapter
{
private Context mContext;
public ChessAdapter (Context pContext)
{
this.mContext = pContext;
}
@Override
public int getCount()
{
return 64;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView lImageView;
if (convertView == null) {
lImageView = new ImageView(mContext);
int size = parent.getWidth()/8;
lImageView.setLayoutParams(new GridView.LayoutParams(size,size));
//background black or white depending of the position
int col = position/8 %2;
if (col == 0)
{
if (position%2 == 0)
lImageView.setBackgroundColor(Color.WHITE);
else
lImageView.setBackgroundColor(Color.BLACK);
}
else
{
if (position%2 == 0)
lImageView.setBackgroundColor(Color.BLACK);
else
lImageView.setBackgroundColor(Color.WHITE);
}
//load images
CPiece p = CChess.getInstance().getPiece(position/8, position%8);
if(p != null)
lImageView.setImageResource(mContext.getResources().getIdentifier(p.toString(), "drawable", mContext.getPackageName()));
} else {
lImageView = (ImageView) convertView;
}
return lImageView;
}
}
結果是:我的64個方格僅1列的所有與圖像(在我的CChess的init()是確定)。要清楚,我想要一個像所有標準棋盤一樣的8x8網格。
前幾天,我把所有這些東西在一個活動,而我的自定義視圖,而只是一個簡單的GridView和一切都正常工作。我已經打破它,因爲我已經決定要在不同的班級
我敢肯定,我忘帶了什麼東西像吹氣的地方分開我的代碼,但我不明白它是如何工作以及它的作用。我已經解析了谷歌幾個小時,但我找不到答案。
你能幫助我嗎?非常感謝你閱讀我,對不起我的英語
謝謝!它現在有效。有沒有辦法讓activity_game.xml不必設置列數?我的意思是,我認爲這是ChessView job或view_chess.xml工作來做到這一點,而不是他們的「父母」。我所需要做的就是在我的活動中沒有任何其他參數的情況下調用ChessView以獲得我的棋盤。不知道是不是我很清楚 – Steel 2013-05-09 14:00:13
在國際象棋視圖可以提SetColumnCount(8)它的工作原理,那麼你不想提及它在activity_game.xml文件。這裏view_chess.xml文件不是必需的。 – 2013-05-10 06:47:48
完美!正是我想要的。非常感謝 !我想知道一些事情:我的view_chess.xml現在是無用的,但如果我想在那裏添加一些靜態配置,我怎麼能把它鏈接到我的ChessView.java?我只是好奇 – Steel 2013-05-12 11:34:23