Android入门第十三篇之Gallery + ImageSwitcher .

上次讲了如何使用Gallery控件,这次就讲Gallery 与ImageSwitcher的结合使用,本文实现一个简单的浏览图片的功能。先贴出程序运行截图:

除了Gallery可以拖拉切换图片,我在ImageSwitcher控件加入了setOnTouchListener事件实现,使得ImageSwitcher也可以在拖拉中切换图片。本例子依然使用JAVA的反射机制来自动读取资源中的图片。

main.xml的源码如下:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent">
  5. <ImageSwitcherandroid:id="@+id/switcher"
  6. android:layout_width="match_parent"android:layout_height="match_parent"/>
  7. <Galleryandroid:id="@+id/gallery"
  8. android:background="#55000000"
  9. android:layout_width="match_parent"
  10. android:layout_alignParentBottom="true"
  11. android:layout_alignParentLeft="true"
  12. android:gravity="center_vertical"
  13. android:spacing="16dp"android:layout_height="100dp"/>
  14. </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageSwitcher android:id="@+id/switcher" android:layout_width="match_parent" android:layout_height="match_parent"/> <Gallery android:id="@+id/gallery" android:background="#55000000" android:layout_width="match_parent" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:gravity="center_vertical" android:spacing="16dp" android:layout_height="100dp"/> </RelativeLayout>

程序的源码如下:

  1. packagecom.testImageView;
  2. importjava.lang.reflect.Field;
  3. importjava.util.ArrayList;
  4. importandroid.app.Activity;
  5. importandroid.content.Context;
  6. importandroid.os.Bundle;
  7. importandroid.view.MotionEvent;
  8. importandroid.view.View;
  9. importandroid.view.View.OnTouchListener;
  10. importandroid.view.ViewGroup;
  11. importandroid.view.animation.AnimationUtils;
  12. importandroid.widget.AdapterView;
  13. importandroid.widget.BaseAdapter;
  14. importandroid.widget.Gallery;
  15. importandroid.widget.ImageSwitcher;
  16. importandroid.widget.ImageView;
  17. importandroid.widget.AdapterView.OnItemSelectedListener;
  18. importandroid.widget.Gallery.LayoutParams;
  19. importandroid.widget.ViewSwitcher.ViewFactory;
  20. publicclasstestImageViewextendsActivityimplementsViewFactory{
  21. privateImageSwitcheris;
  22. privateGallerygallery;
  23. privateintdownX,upX;
  24. privateArrayList<Integer>imgList=newArrayList<Integer>();//图像ID
  25. @Override
  26. protectedvoidonCreate(BundlesavedInstanceState){
  27. //TODOAuto-generatedmethodstub
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.main);
  30. //用反射机制来获取资源中的图片ID
  31. Field[]fields=R.drawable.class.getDeclaredFields();
  32. for(Fieldfield:fields)
  33. {
  34. if(!"icon".equals(field.getName()))//除了icon之外的图片
  35. {
  36. intindex=0;
  37. try{
  38. index=field.getInt(R.drawable.class);
  39. }catch(IllegalArgumentExceptione){
  40. //TODOAuto-generatedcatchblock
  41. e.printStackTrace();
  42. }catch(IllegalAccessExceptione){
  43. //TODOAuto-generatedcatchblock
  44. e.printStackTrace();
  45. }
  46. //保存图片ID
  47. imgList.add(index);
  48. }
  49. }
  50. //设置ImageSwitcher控件
  51. is=(ImageSwitcher)findViewById(R.id.switcher);
  52. is.setFactory(this);
  53. is.setInAnimation(AnimationUtils.loadAnimation(this,
  54. android.R.anim.fade_in));
  55. is.setOutAnimation(AnimationUtils.loadAnimation(this,
  56. android.R.anim.fade_out));
  57. is.setOnTouchListener(newOnTouchListener(){
  58. /*
  59. *在ImageSwitcher控件上滑动可以切换图片
  60. */
  61. @Override
  62. publicbooleanonTouch(Viewv,MotionEventevent){
  63. if(event.getAction()==MotionEvent.ACTION_DOWN)
  64. {
  65. downX=(int)event.getX();//取得按下时的坐标
  66. returntrue;
  67. }
  68. elseif(event.getAction()==MotionEvent.ACTION_UP)
  69. {
  70. upX=(int)event.getX();//取得松开时的坐标
  71. intindex=0;
  72. if(upX-downX>100)//从左拖到右,即看前一张
  73. {
  74. //如果是第一,则去到尾部
  75. if(gallery.getSelectedItemPosition()==0)
  76. index=gallery.getCount()-1;
  77. else
  78. index=gallery.getSelectedItemPosition()-1;
  79. }
  80. elseif(downX-upX>100)//从右拖到左,即看后一张
  81. {
  82. //如果是最后,则去到第一
  83. if(gallery.getSelectedItemPosition()==(gallery.getCount()-1))
  84. index=0;
  85. else
  86. index=gallery.getSelectedItemPosition()+1;
  87. }
  88. //改变gallery图片所选,自动触发ImageSwitcher的setOnItemSelectedListener
  89. gallery.setSelection(index,true);
  90. returntrue;
  91. }
  92. returnfalse;
  93. }
  94. });
  95. //设置gallery控件
  96. gallery=(Gallery)findViewById(R.id.gallery);
  97. gallery.setAdapter(newImageAdapter(this));
  98. gallery.setOnItemSelectedListener(newOnItemSelectedListener(){
  99. @Override
  100. publicvoidonItemSelected(AdapterView<?>arg0,Viewarg1,
  101. intposition,longarg3){
  102. is.setImageResource(imgList.get(position));
  103. }
  104. @Override
  105. publicvoidonNothingSelected(AdapterView<?>arg0){
  106. //TODOAuto-generatedmethodstub
  107. }
  108. });
  109. }
  110. //设置ImgaeSwitcher
  111. @Override
  112. publicViewmakeView(){
  113. ImageViewi=newImageView(this);
  114. i.setBackgroundColor(0xFF000000);
  115. i.setScaleType(ImageView.ScaleType.CENTER);//居中
  116. i.setLayoutParams(newImageSwitcher.LayoutParams(//自适应图片大小
  117. LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
  118. returni;
  119. }
  120. publicclassImageAdapterextendsBaseAdapter{
  121. publicImageAdapter(Contextc){
  122. mContext=c;
  123. }
  124. publicintgetCount(){
  125. returnimgList.size();
  126. }
  127. publicObjectgetItem(intposition){
  128. returnposition;
  129. }
  130. publiclonggetItemId(intposition){
  131. returnposition;
  132. }
  133. publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
  134. ImageViewi=newImageView(mContext);
  135. i.setImageResource(imgList.get(position));
  136. i.setAdjustViewBounds(true);
  137. i.setLayoutParams(newGallery.LayoutParams(
  138. LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
  139. returni;
  140. }
  141. privateContextmContext;
  142. }
  143. }
package com.testImageView; import java.lang.reflect.Field; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageSwitcher; import android.widget.ImageView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.Gallery.LayoutParams; import android.widget.ViewSwitcher.ViewFactory; public class testImageView extends Activity implements ViewFactory { private ImageSwitcher is; private Gallery gallery; private int downX,upX; private ArrayList<Integer> imgList=new ArrayList<Integer>();//图像ID @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main); //用反射机制来获取资源中的图片ID Field[] fields = R.drawable.class.getDeclaredFields(); for (Field field : fields) { if (!"icon".equals(field.getName()))//除了icon之外的图片 { int index = 0; try { index = field.getInt(R.drawable.class); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } //保存图片ID imgList.add(index); } } //设置ImageSwitcher控件 is = (ImageSwitcher) findViewById(R.id.switcher); is.setFactory(this); is.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); is.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out)); is.setOnTouchListener(new OnTouchListener(){ /* * 在ImageSwitcher控件上滑动可以切换图片 */ @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_DOWN) { downX=(int) event.getX();//取得按下时的坐标 return true; } else if(event.getAction()==MotionEvent.ACTION_UP) { upX=(int) event.getX();//取得松开时的坐标 int index=0; if(upX-downX>100)//从左拖到右,即看前一张 { //如果是第一,则去到尾部 if(gallery.getSelectedItemPosition()==0) index=gallery.getCount()-1; else index=gallery.getSelectedItemPosition()-1; } else if(downX-upX>100)//从右拖到左,即看后一张 { //如果是最后,则去到第一 if(gallery.getSelectedItemPosition()==(gallery.getCount()-1)) index=0; else index=gallery.getSelectedItemPosition()+1; } //改变gallery图片所选,自动触发ImageSwitcher的setOnItemSelectedListener gallery.setSelection(index, true); return true; } return false; } }); //设置gallery控件 gallery = (Gallery) findViewById(R.id.gallery); gallery.setAdapter(new ImageAdapter(this)); gallery.setOnItemSelectedListener(new OnItemSelectedListener(){ @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long arg3) { is.setImageResource(imgList.get(position)); } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } }); } //设置ImgaeSwitcher @Override public View makeView() { ImageView i = new ImageView(this); i.setBackgroundColor(0xFF000000); i.setScaleType(ImageView.ScaleType.CENTER);//居中 i.setLayoutParams(new ImageSwitcher.LayoutParams(//自适应图片大小 LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); return i; } public class ImageAdapter extends BaseAdapter { public ImageAdapter(Context c) { mContext = c; } public int getCount() { return imgList.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView i = new ImageView(mContext); i.setImageResource(imgList.get(position)); i.setAdjustViewBounds(true); i.setLayoutParams(new Gallery.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); return i; } private Context mContext; } }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值