在gridview中洗牌

时间:2014-12-05 22:31:50

标签: android gridview bitmap imageview shuffle

我在网格视图中移动图像时遇到问题。我是一个npuzzle滑块,只能滑动空白图像。主要问题是我在gridviewadapter中的imageview上设置了标签。但是,如果我将图像混洗,这些标签将保持不变,但应该随图像而变化。例如,

假设我得到了bitmaps的bitmaparraylist:{bm0,bm1,bm2,bm3,bm4,bm5,bm6,bm7,bm8},我设置标签{0,1,2,3,4,5,6, 7,8}在我的图像适配器中。如果我改变这个位图,我该如何用它们来移动图像标记呢?

以下是我的imageAdapter的代码:

private ArrayList<Bitmap> crops;
private List ID;
private Context mContext;

public ImageAdapter(Context c, ArrayList<Bitmap> crops, List ID) {
    mContext = c;
    this.crops = crops;
    this.ID = ID;
}

public int getCount() {
    return crops.size();
}

public Object getItem(int position) {
    return null;
}

public long getItemId(int position) {
    return 0;
}


public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {  // if it's not recycled, initialize some attributes
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }

    imageView.setImageBitmap(crops.get(position));
    imageView.setTag(position);
    return imageView;
}

}

正如您所看到的,标签将始终相同,但这会导致问题。 :(

任何有关解决此问题的提示或技巧?

PS:我创建了一个列表ID,但没有做任何事情,因为我不知道该怎么做

基斯

3 个答案:

答案 0 :(得分:0)

您可以随机播放列表或任何其他此类

的集合
long seed = System.nanoTime();
Collections.shuffle(bitmaparraylist , new Random(seed));

此调用适配器的notifydatasetchanged方法之后。您无需设置ImageView标记。

答案 1 :(得分:0)

当我将collections.shuffle()放入GridView中的图像时? imageIDs是否为shuffle()提供参考,必须首先传递给arrayList?我知道随机更复杂所以我更喜欢使用collections.shuffle()。

// Inside a controller
class MyController {
    public function myAction() {
        if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
            throw $this->createAccessDeniedException();
        }
    }
}

答案 2 :(得分:0)

在适配器中添加方法

public void shuffle() {
        Collections.shuffle(crops, new Random(System.currentTimeMillis()));
    }

并致电

imageAdapter.shuffle();
imageAdapter.notifyDataSetChanged();