我有一个网格布局,其中的行数和列数取决于解析为活动的int的值。我现在试图将我拥有的12张图像中的一张随机地放入每个网格空间中,以便在屏幕上的正方形中随机混合图像。那么如何在不使用xml的情况下将drawable放入网格空间并且表格布局会更好?我还需要能够在单击时检测网格空间中的图像。
答案 0 :(得分:0)
我在前一段时间实施记忆游戏时遇到了同样的问题。
要获得可绘制对象,首先需要获取应用资源。
Resources res = getResources();
然后,我为生成随机位置所做的是将我的所有图像放在一个ArrayList中,其元素数量等于你拥有的网格数量:
ArrayList<Drawable> imagesArray = new ArrayList<Drawable>();
imagesArray.add(res.getDrawable(R.drawable.yourdrawablename));
imagesArray.add(res.getDrawable(R.drawable.yourdrawable2name));
//and so on for the following drawables you have.
之后,您可以使用ArrayList的大小生成一个随机数,即您拥有的图像数量相同,然后将图像放在网格上并将其从数组中删除。
for(int i = 0 ; i < imagesArray.size() ; i++) {
int randomPosition = Random.nextInt(imagesArray.size());
//here's the code to put your drawable in your grid view, in my case, it was just a button
//background, so I didn't know exactly how to put it inside a position of the grid, but it
//should not be that difficult to get it from documentation
//In my case, I do:
button.setBackground(imagesArray.get(randomPosition));
//And then delete that position on the array...
imagesArray.remove(randomPosition);
//And repeat until array's length is null;
}
对于最后一个问题,为了发现可绘制的女巫是在哪个网格中,你可以得到它的constantState:
gridViewElement.getBackground();
这将返回背景作为与该gridView关联的drawable。 另外,请注意,如果要与两个不同网格中的drawable进行比较,则应使用此选项:
if(gridViewElement1.getBackground().getConstantState()
.equals(gridViewElement2.getBackground().getConstantState())) {
//code goes here.
}