问题描述
我难怪有反正在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
现在,我转换这个整数[]
到的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
您可以看到列表的顺序。它的不同,那么之前。要在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;
}
这篇关于在GridView中随机图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!