结合ImageSwithcer和Gallery控件制作一个图片浏览(附源代码)


ImageSwitcher Android 中控制图片展示效果的一个控件,如:幻灯片效果;Gallery俗称画廊控件,是android中实现拖动图片移动一个控件,在项目开发中经常用到该控件。在网上可以看到很多类似这样的例子和效果,一些做得可能还更好。跟网上那些例子不同的是,在这里用了稍微多一点的代码注释讲解ImageSwitch和Gallery的结合使用,作为抛砖引玉的作用。可能有些地方说得不太详细,请多多指教。话不多说,上个运行截图先。
运行截图:
下部分的是Gallery控件,实现了无限循环.


项目结构:

界面布局:
采用绝对布局,上部分是ImageSwitcher控件,下部分是Gallery控件。
代码如下:
  1. <?xml version="1.0" encoding="utf-8"?>

  2. <!-- 相对布局 -->

  3. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  4. android:layout_width="fill_parent"

  5. android:layout_height="fill_parent" > 
  6. <!-- 宽和高填满父控件 -->

  7. <ImageSwitcher 
  8. android:id="@+id/switcher"

  9. android:layout_width="fill_parent"

  10. android:layout_height="fill_parent" />

  11. <!-- 宽填满父控件,高为60像素,间隔为16像素,与父控件的左侧和底部对齐 -->

  12. <Gallery

  13. android:id="@+id/gallery" 
  14. android:layout_width="fill_parent"

  15. android:layout_height="60px"

  16. android:spacing="16px" 
  17. android:layout_alignParentLeft="true"

  18. android:layout_alignParentBottom="true" /> 
  19. </RelativeLayout>
复制代码
ViewPicturesActivity.java代码:
  1. package com.android.coding;


  2. import android.app.Activity;


  3. import android.content.Context;

  4. import android.os.Bundle;

  5. import android.view.View;

  6. import android.view.ViewGroup;

  7. import android.widget.AdapterView;

  8. import android.widget.AdapterView.OnItemSelectedListener;

  9. import android.widget.BaseAdapter;

  10. import android.widget.Gallery;

  11. import android.widget.Gallery.LayoutParams;

  12. import android.widget.ViewSwitcher.ViewFactory;

  13. import android.widget.ImageSwitcher;

  14. import android.widget.ImageView;


  15. public class ViewPicturesActivity extends Activity {

  16. ImageSwitcher imageSwitcher; //声明ImageSwitcher对象,图片显示区域

  17. Gallery gallery; //声明Gallery对象,图片列表索引

  18. int imagePosition; //标记图片数组下标,用于循环显示

  19. //声明图片整型数组

  20. private int[] images = {

  21. R.drawable.image1,R.drawable.image2,

  22. R.drawable.image3,R.drawable.image4,

  23. R.drawable.image5,R.drawable.image6,

  24. R.drawable.image7,R.drawable.image8,

  25. R.drawable.image9,R.drawable.image10,

  26. R.drawable.image11,R.drawable.image12,

  27. R.drawable.image13,R.drawable.image14,

  28. R.drawable.image15,R.drawable.image16,

  29. R.drawable.image17};


  30. @Override

  31. public void onCreate(Bundle savedInstanceState) {

  32. super.onCreate(savedInstanceState);

  33. setContentView(R.layout.main);

  34. //通过控件的ID获得imageSwitcher的对象

  35. imageSwitcher = (ImageSwitcher) findViewById(R.id.switcher);

  36. //设置自定义的图片显示工厂类

  37. imageSwitcher.setFactory(new MyViewFactory(this));

  38. //通过控件的ID获得gallery的对象

  39. gallery = (Gallery) findViewById(R.id.gallery);

  40. //设置自定义的图片适配器

  41. gallery.setAdapter(new ImageAdapter(this)); 
  42. //实现被选中的事件监听器

  43. gallery.setOnItemSelectedListener(new OnItemSelectedListener() { 
  44. @Override

  45. public void onItemSelected(AdapterView<?> parent, View view,

  46. int position, long id) {

  47. //通过求余数,循环显示图片

  48. imageSwitcher.setImageResource(images[position%images.length]); 
  49. }

  50. @Override

  51. public void onNothingSelected(AdapterView<?> parent) {

  52. // TODO Auto-generated method stub 
  53. }

  54. }); 
  55. }


  56. //自定义图片适配器,继承BaseAdapter

  57. class ImageAdapter extends BaseAdapter{ 
  58. private Context context; //定义上下文


  59. //参数为上下文的构造方法

  60. public ImageAdapter(Context context) {

  61. this.context = context;

  62. }


  63. //得到图片的大小

  64. @Override

  65. public int getCount() { //设置为整型的最大数

  66. return Integer.MAX_VALUE;

  67. }


  68. //得到指定图片的对象

  69. @Override

  70. public Object getItem(int position) { 
  71. return null;

  72. }


  73. //得到指定图片的对象的ID

  74. @Override

  75. public long getItemId(int position) { 
  76. return 0;

  77. }


  78. //显示图标列表

  79. @Override

  80. public View getView(int position, View convertView, ViewGroup parent) {

  81. ImageView iv = new ImageView(context); //创建ImageView对象

  82. iv.setImageResource(images[position%images.length]); //设置循环显示图片

  83. iv.setAdjustViewBounds(true); //图片自动调整显示

  84. //设置图片的宽和高

  85. iv.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

  86. return iv; //返回ImageView对象


  87. }


  88. //自定义图片显示工厂类,继承ViewFactory

  89. class MyViewFactory implements ViewFactory{

  90. private Context context; //定义上下文


  91. //参数为上下文的构造方法

  92. public MyViewFactory(Context context) {

  93. this.context = context;

  94. }


  95. //显示图标区域

  96. @Override

  97. public View makeView() {

  98. ImageView iv = new ImageView(context); //创建ImageView对象

  99. iv.setScaleType(ImageView.ScaleType.FIT_CENTER); //图片自动居中显示

  100. //设置图片的宽和高

  101. iv.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));

  102. return iv; //返回ImageView对象



  103. }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值