Android进阶2之Gallery无限循环


在此之前,我已经发表过常规的Gallery。如果之前没有学习过的,可以查看博文: Android学习笔记之Gallery

这篇文章详细讲述了什么是gallery,以及怎么样是要用它。在这里就不用介绍了,这里主要讲述gallery的循环使用。

gallery的循环使用其实很简单的,上网一搜一大堆,但是我还是写一下。一是记录一下自己的学习成果,另一个是和大家一起分享一下。


实现gallery循环主要涉及到继承BaseAdapter的ImageAdapter 。

// 获取图片的个数 public int getCount() { return Integer.MAX_VALUE; }


public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView = new ImageView(context); // 给ImageView设置资源 imageView.setImageResource(image[position % image.length]); // 设置显示比例类型 imageView.setScaleType(ImageView.ScaleType.FIT_XY); // 设置布局 图片120*80 imageView.setLayoutParams(new Gallery.LayoutParams(60, 60)); return imageView; }

对比以前的文章,你会发现,变动了两处地方:一个是getCount()方法中返回了一个Integer的最大值代替了图片的数量;

另一个地方是imageView.setImageResource(image[position % image.length]);

gallery组件正好显示到最后一个图像,position参数值正好为getCount() - 1

为了实现了一个循环,必须return一个很大的数,就是保证点击一直可以往下走,对position 取余就实现了图片的循环0,1,2............image.length()-1,0,1,2.............



具体实现:

package xiaosi.loopgallery; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageView; public class LoopGalleryActivity extends Activity { private Gallery gallery; private int[] image = new int[] { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e, R.drawable.f, R.drawable.g, R.drawable.h, R.drawable.i, R.drawable.j, }; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); gallery = (Gallery) findViewById(R.id.gallery); gallery.setAdapter(new ImageAdapter(this)); gallery.setSpacing(1); gallery.setSelection(4); gallery.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {} public void onNothingSelected(AdapterView<?> arg0) {} }); } class ImageAdapter extends BaseAdapter { private Context context; public ImageAdapter(Context c) { context = c; } // 获取图片的个数 public int getCount() { return Integer.MAX_VALUE; } // 获取图片在库中的位置 public Object getItem(int position) { return position; } // 获取图片ID public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView = new ImageView(context); // 给ImageView设置资源 imageView.setImageResource(image[position % image.length]); // 设置显示比例类型 imageView.setScaleType(ImageView.ScaleType.FIT_XY); // 设置布局 图片120*80 imageView.setLayoutParams(new Gallery.LayoutParams(60, 60)); return imageView; } } }

main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Gallery android:id="@+id/gallery" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:background="?android:galleryItemBackground"/> </LinearLayout>


一起见证菜鸟的起飞。。。。。。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值