在GridView中随机图像图像、GridView

2023-09-04 07:09:54 作者:桃花下浅酌

我难怪有反正在GridView中随机图像

I was wonder there is anyway to random image in GridView

在code波纹管是工作很适合我,但它并没有随机图像中的GridView时开始活动。

The code bellow is working well for me but it's doesn't random image in GridView when start activity.

我应该怎么修改code波纹管,使之乱?

What should I modify code bellow to make it random?

布局:

<GridView
        android:id="@+id/fruit_gridview"
        android:layout_width="wrap_content" 
        android:layout_height="fill_parent"
        android:columnWidth="90dp"
        android:numColumns="auto_fit"
        android:verticalSpacing="5dp"
        android:horizontalSpacing="10dp"
        android:stretchMode="columnWidth"
        android:gravity="center"
        android:smoothScrollbar="true" />
</RelativeLayout>

图片适配器:

Image Adapter:

// create a new ImageView for each item referenced by the Adapter
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.setImageResource(mThumbIds[position]);
    return imageView;
}

// references to our images
public Integer[] mThumbIds = {
        R.drawable.apple, R.drawable.apricot,
        R.drawable.banana, R.drawable.bell,
        R.drawable.blueberries, R.drawable.broccoli,
        R.drawable.carrot, R.drawable.celery,
        R.drawable.cherry, R.drawable.chili,
        R.drawable.coconut, R.drawable.dragon_fruit,
        R.drawable.durian, R.drawable.eggplant,
        R.drawable.erdnuss, R.drawable.grape,
        R.drawable.guava, R.drawable.kiwi,
        R.drawable.lettuce, R.drawable.lychee,
        R.drawable.mango, R.drawable.mangosteen,
        R.drawable.passion, R.drawable.mengkudu,
        R.drawable.mushroom, R.drawable.onion,
        R.drawable.orange, R.drawable.pear,
        R.drawable.pineapple, R.drawable.pomegranate,
        R.drawable.potato, R.drawable.pumpkin,
        R.drawable.radish, R.drawable.strawberry,
        R.drawable.tomato, R.drawable.watermelon
};

GridView的活动:

GridView Activity:

GridView gridview = (GridView) findViewById(R.id.fruit_gridview);
    gridview.setAdapter(new ImageAdapter_Fruit_24(this));

    final ImageAdapter_Fruit_24 imageAdapter = new ImageAdapter_Fruit_24(this);

谢谢你!

推荐答案

请尝试以下展示或给予适配器之前,code。

Try following code before displaying or giving to Adapter.

// Fisher–Yates shuffle
static void shuffleArray(Integer[] intArr) {
    Random rnd = new Random();
    for (int i = intArr.length - 1; i >= 0; i--) {
        int index = rnd.nextInt(i + 1);
        // Simple swap
        int temp = intArr[index];
        intArr[index] = intArr[i];
        intArr[i] = temp;
    }
}

您也可以将其转换为 ArraryList&LT;整数GT; 列表集合都有自己的方法洗牌

You can also convert it to ArraryList<Integer> or List. Collections has its own method shuffle.

List list = Arrays.asList( solutionArray );
Collections.shuffle(list);

修改

转换整数[] 的ArrayList

ArrayList<Integer> arrList = new ArrayList<Integer>();
for(int i = 1 ; i < intArr.length ; i++)
{
    arrList.add(intArr[i]);
}
Collections.shuffle(arrList);

要使用 arrList ,使用 arrList.get(位置)方法。

示例

我把所有的整数数组像你。我有我的方式实现。

I have all the Integer array like yours. I have implemented on my way.

Log.d("Home","Before Shuffle");
    for(int i=0;i< mThumbIds.length;i++){
        Log.i("Home",""+mThumbIds[i]);
}

输出会像下面。 (不要与你的输出比较。资源ID可以不同)

output will be like following. (Don't compare with your output. Resource ids may different)

十二月6日至19日:49:53.489:INFO /家庭(2627):2130837504   十二月6号至19号:49:53.489:INFO /家庭(2627):2130837505   十二月6号至19号:49:53.489:INFO /家庭(2627):2130837508   十二月6号至19号:49:53.489:INFO /家庭(2627):2130837507   十二月6号至19号:49:53.489:INFO /家庭(2627):2130837506   十二月6号至19号:49:53.489:INFO /家庭(2627):2130837509   十二月6号至19号:49:53.489:INFO /家庭(2627):2130837510   十二月6号至19号:49:53.489:INFO /家庭(2627):2130837511

06-19 12:49:53.489: INFO/Home(2627): 2130837504 06-19 12:49:53.489: INFO/Home(2627): 2130837505 06-19 12:49:53.489: INFO/Home(2627): 2130837508 06-19 12:49:53.489: INFO/Home(2627): 2130837507 06-19 12:49:53.489: INFO/Home(2627): 2130837506 06-19 12:49:53.489: INFO/Home(2627): 2130837509 06-19 12:49:53.489: INFO/Home(2627): 2130837510 06-19 12:49:53.489: INFO/Home(2627): 2130837511

现在,我转换这个整数[] 的ArrayList&LT;整数GT;

ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0;i< mThumbIds.length;i++){
    list.add(mThumbIds[i]);
}

现在,随机播放列表和打印。

Now, Shuffle list and print.

Collections.shuffle(list);
for(int i=0;i< list.size();i++){
    Log.i("Home",""+list.get(i));
}

输出。 (您运行code每一次,输出会有所不同,因此不会与previous一一比较。)

Output. (Every time you run your code, output will be different. So don't compare with previous one.)

十二月6日至19日:49:53.489:INFO /家庭(2627):2130837511   十二月6号至19号:49:53.489:INFO /家庭(2627):2130837504   十二月6号至19号:49:53.489:INFO /家庭(2627):2130837506   十二月6号至19号:49:53.489:INFO /家庭(2627):2130837508   十二月6号至19号:49:53.489:INFO /家庭(2627):2130837510   十二月6号至19号:49:53.489:INFO /家庭(2627):2130837505   十二月6号至19号:49:53.489:INFO /家庭(2627):2130837507   十二月6号至19号:49:53.489:INFO /家庭(2627):2130837509

06-19 12:49:53.489: INFO/Home(2627): 2130837511 06-19 12:49:53.489: INFO/Home(2627): 2130837504 06-19 12:49:53.489: INFO/Home(2627): 2130837506 06-19 12:49:53.489: INFO/Home(2627): 2130837508 06-19 12:49:53.489: INFO/Home(2627): 2130837510 06-19 12:49:53.489: INFO/Home(2627): 2130837505 06-19 12:49:53.489: INFO/Home(2627): 2130837507 06-19 12:49:53.489: INFO/Home(2627): 2130837509

您可以看到列表的顺序。它的不同,那么之前。要在code使用。

You can see the sequence of your list. Its different then before. To use in your code.

GridView gridview = (GridView) findViewById(R.id.fruit_gridview);
//do shuffle of list. make sure you have write above code before this
Collections.shuffle(list);
ImageAdapter_Fruit_24 imageAdapter = new ImageAdapter_Fruit_24(this);
gridview.setAdapter(imageAdapter);

在你的 getView()

// create a new ImageView for each item referenced by the Adapter
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;
    }
    //here changes will be done
    imageView.setImageResource(list.get(position));
    return imageView;
}