随机将drawable放在网格中

时间:2014-10-05 01:22:55

标签: android drawable

我有一个网格布局,其中的行数和列数取决于解析为活动的int的值。我现在试图将我拥有的12张图像中的一张随机地放入每个网格空间中,以便在屏幕上的正方形中随机混合图像。那么如何在不使用xml的情况下将drawable放入网格空间并且表格布局会更好?我还需要能够在单击时检测网格空间中的图像。

1 个答案:

答案 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.
}