Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在网格视图中移动_Android_Gridview_Bitmap_Imageview_Shuffle - Fatal编程技术网

Android 在网格视图中移动

Android 在网格视图中移动,android,gridview,bitmap,imageview,shuffle,Android,Gridview,Bitmap,Imageview,Shuffle,我在gridview中洗牌图像时遇到问题。我是一个n谜题滑块,只能幻灯片空白图像。主要问题是我在gridviewadapter中的imageview上设置了标记。但是,如果我洗牌的图像,这些标签将保持不变,但应该改变与图像。比如说 假设我得到一个位图的位图数组列表:{bm0,bm1,bm2,bm3,bm4,bm5,bm6,bm7,bm8},然后在我的图像适配器中设置标记{0,1,2,3,4,5,6,7,8}。如果我洗牌这个位图,我该如何洗牌图像标签呢 以下是我的imageAdapter的代码:

我在gridview中洗牌图像时遇到问题。我是一个n谜题滑块,只能幻灯片空白图像。主要问题是我在gridviewadapter中的imageview上设置了标记。但是,如果我洗牌的图像,这些标签将保持不变,但应该改变与图像。比如说

假设我得到一个位图的位图数组列表:{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;
}
私有数组列表;
私有列表ID;
私有上下文;
公共ImageAdapter(上下文c、ArrayList、列表ID){
mContext=c;
这个。农作物=农作物;
this.ID=ID;
}
public int getCount(){
返回作物。大小();
}
公共对象getItem(int位置){
返回null;
}
公共长getItemId(int位置){
返回0;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
图像视图图像视图;
如果(convertView==null){//如果它没有被回收,初始化一些属性
imageView=新的imageView(mContext);
setLayoutParams(新的GridView.LayoutParams(85,85));
imageView.setScaleType(imageView.ScaleType.CENTER\U裁剪);
设置填充(8,8,8,8);
}否则{
imageView=(imageView)convertView;
}
setImageBitmap(crops.get(position));
设置标签(位置);
返回图像视图;
}
}

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

有解决这个问题的提示、窍门或技巧吗

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


Kees

您可以洗牌列表或任何其他类似的集合

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

在此调用之后,适配器的notifydatasetchanged方法。在我将collections.shuffle()放入GridView中的图像时,您不需要设置ImageView的标记。

? ImageID作为shuffle()的引用,必须首先传递给arrayList?我知道random更复杂,所以我更喜欢使用collections.shuffle()

公共类ImageAdapter扩展了BaseAdapter{
私有上下文;
整数[]图像ID;
公共图像适配器(上下文c、int…pos){
mContext=c;
imageIDs=new Integer[pos.length];//用于设置项目的数量

对于(inti=0;i在适配器中添加方法

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

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