千磨万击还坚劲,任尔东西南北风。这篇文章主要讲述Android攻城狮Gallery和ImageSwitcher制作图片浏览器相关的知识,希望能为你提供帮助。
使用Gallery 和 ImageSwitcher 制作图片浏览器 Gallery介绍 我们有时候在手机上或者PC上看到动态的图片,可以通过鼠标或者手指触摸来移动它,产生动态的图片滚动效果,还可以根据你的点击或者触摸来触发其他事件响应。同样的,在android中也提供这种实现,这就是通过Gallery在UI上实现缩略图浏览器。 ------------------------- 谷歌已经将Gallery列为过期的控件,建议使用HorizonScrollView或者ViewPager。 ------------------------- 查看源码不难发现 ArrayAdapter 和 SimpleAdapter 都继承了 BaseAdapter。 所以,我们也可以自己定义一个适配器!自定义的好处是自由度、灵活性会更大。 BaseAdapter中的重要方法 (1)public int getCount()——返回一定义的数据源的总数量 (2)public Object getItem(int position) public long getItemId(int position) ——告诉适配器取得目前容器中的数据ID和对象 (3)public View getView(int position,View convertView,ViewGroupparent)——取得目前要显示的图像View,传入数组ID值使之读取与成像。 ----------------------------------- 使用 Gallery 浏览图片的步骤: 1. 在 main.xml 中添加 Gallery标签。 2. 在 MainActivity 中创建数据源,这里就是 int数组存放图片id。 3. 自定义适配器。创建一个新类 ImageAdapter ,继承 BaseAdapter。重写getView(int position, View view, ViewGroup viewGroup)方法。 4. 在 MainActivity加载适配器。
自定义适配器的步骤 1. 创建一个新类 IamgeAdapter ,继承BaseAdapter。 2. 为了接收参数,需要构建有参的构造方法: privateint[]res; //用于接收数据源 private Context context; //上下文信息,ImageView的初始化会用到 //构造有参构造方法 public ImageAdapter(int[]res,Context context){ this.res=res; this.context=context; } 3. 重写getView(),把图片ID(这里是res[position])转变为 ImageView,并返回 ImageView: public View getView(int position, View view, ViewGroup viewGroup) { ImageView image = new ImageView(context); image.setBackgroundResource(res[position]); //设置图片(ImageView)在Gallery中的缩略图的大小 image.setLayoutParams(new Gallery.LayoutParams(400,300)); //宽是400,高是300 //设置缩放比例(scale)采取的类型 image.setScaleType(ImageView.ScaleType.FIT_XY); //横向X-Y轴的拉伸 return image; } 其他方法的重写,写法固定: public int getCount() { return res.length; } public Object getItem(int position) { return res[position]; } public long getItemId(int position) { return position; }
无限轮播图片的实现: 1. 改写 ImageAdapter 适配器的 onCount()方法,使它返回整数最大值 Integer.MAX_VALUE。 2. 改写 getView():image.setBackgroundResource(res[position%res.length]); 由于数组res的下标的上限是 Integer.MAX_VALUE,所以 position%res.length 的运算结果是一个循环数组。这样就实现了循环播放图片。 --------------------------------------------- ImageSwitcher实现大图浏览的步骤: 1. 在 main.xml 中添加 ImageSwitcher标签。 2. 让 MainActivity 继承接口 ViewFactory。重写方法 makeView(): public View makeView() { ImageView image = new ImageView(this); //初始化ImageView对象 image.setScaleType(ImageView.ScaleType.FIT_CENTER); //保持宽高比例,并且居中显示 return image; } 重写 onItemSelected(),只写一句:imageSwitcher.setBackgroundResource(res[position%res.length]); //imageSwitch加载图片资源。 3. 在 MainActivity 中创建和初始化 ImageSwitcher 的对象。之后加载工厂:imageSwitcher.setFactory(this); 然后就是加载动画效果,比如:imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in)); //淡入的效果
ImageSwitcher 大图浏览 ImageSwitcher 和 ImageView 的功能有点类似,他们都可以用于显示图片,区别在于 ImageSwitcher 的效果更炫,它可以指定图片切换时的动画效果。 为了让 ImageSwitcher 加载图片,必须让MainActivity实现接口ViewFactory。 --------------------------------------- ViewFactory的使用 ImageSwitcher 粗略的理解就是 ImageView 的选择器,它需要设置 ViewFactory。一般情况下,我们让该 ViewFactory 的 makeView()方法返回 ImageView。 ----------------------------------- 为ImageSwitcher加入动画 imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in)); //淡入的效果 imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out)); //淡出的效果
1 //gallery实现图片大图预览的循环播放 2 //ImageSwitcher 和 ImageView 的功能有点类似,他们都可以用于显示图片, 3 //区别在于 ImageSwitcher 的效果更炫,它可以指定图片切换时的动画效果。 4 //ImageSwitcher实现ViewFactory,监听事件 OnItemSelectedListener 5 public class MainActivity extends Activity implements OnItemSelectedListener, 6ViewFactory { 7// 准备数据源 8private int[] res = { R.drawable.item1, R.drawable.item2, R.drawable.item3, 9R.drawable.item4, R.drawable.item5, R.drawable.item6, 10R.drawable.item7, R.drawable.item8, R.drawable.item9, 11R.drawable.item10, R.drawable.item11, R.drawable.item12 }; 12private Gallery gallery; 13private ImageAdapter adapter; 14 15 16private ImageSwitcher imageSwitcher; 17 18// ArrayAdapter< String> adapter; 19// SimpleAdapter adapter2; 20@Override 21protected void onCreate(Bundle savedInstanceState) { 22super.onCreate(savedInstanceState); 23setContentView(R.layout.main); 24gallery = (Gallery) findViewById(R.id.gallery); 25imageSwitcher = (ImageSwitcher) findViewById(R.id.imageswitcher); 26 27// gallery加载适配器 28adapter = new ImageAdapter(res, this); 29gallery.setAdapter(adapter); 30gallery.setOnItemSelectedListener(this); 31 32imageSwitcher.setFactory(this); 33//添加动画效果 34imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, 35android.R.anim.fade_in)); 36imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, 37android.R.anim.fade_out)); 38 39} 40 41@Override 42public void onItemSelected(AdapterView< ?> parent, View view, int position, 43long id) { 44// TODO Auto-generated method stub 45 46imageSwitcher.setBackgroundResource(res[position % res.length]); 47} 48 49@Override 50public void onNothingSelected(AdapterView< ?> parent) { 51// TODO Auto-generated method stub 52 53} 54 55@Override 56public View makeView() { 57// TODO Auto-generated method stub 58ImageView imageView = new ImageView(this); 59imageView.setScaleType(ScaleType.FIT_CENTER); // 大图预览 60return imageView; 61} 62 63 }
1 public class ImageAdapter extends BaseAdapter { 2private int[] res; 3private Context context; 4 5public ImageAdapter(int[] res, Context context) { 6// TODO Auto-generated constructor stub 7this.res = res; 8this.context = context; 9} 10 11// 返回已定义的数据源总数量 12@Override 13public int getCount() { 14// TODO Auto-generated method stub 15 16//return res.length; 17return Integer.MAX_VALUE; //循环播放 18} 19 20// 告诉适配器取得目前容器中的数据ID和对象 21@Override 22public Object getItem(int position) { 23// TODO Auto-generated method stub 24return res[position]; 25} 26 27@Override 28public long getItemId(int position) { 29// TODO Auto-generated method stub 30return position; 31} 32 33// 取得目前欲显示的图像view,传入数组ID值使之读取与成像 34@Override 35public View getView(int position, View convertView, ViewGroup parent) { 36// TODO Auto-generated method stub 37ImageView imageView = new ImageView(context); 38imageView.setBackgroundResource(res[position%res.length]); //循环播放 39imageView.setLayoutParams(new Gallery.LayoutParams(100,50)); //设置图像大小 40 41imageView.setScaleType(ScaleType.FIT_XY); 42return imageView; 43} 44 45 }
【Android攻城狮Gallery和ImageSwitcher制作图片浏览器】
文章图片
推荐阅读
- file not found app文件
- Android攻城狮布局优化
- [android开发之内容更新类APP]项目的基本功能之布局
- Android Native crash日志分析
- Androidproject中增加图片,报错cannot be resolved or is not a field
- Android图片与缩略
- idea中web.xml报错 Servlet should have a mapping
- android screen monitor怎么用
- android开发中用到的pxdpsp