Android Gallery与ImageView的结合使用


Gallery是一个内部元素可以水平滚动,并且可以把当前选择的子元素定位在它中心的布局组件。

本程序的运行效果如下所示:

                 
      具体实现如下: 1、建立一个新项目 2、拷贝10个图片文件到res/drawable目录 3、res/layout/main.xml文件的内容如下:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2.   
  3. <!-- FrameLayout用来显示层叠效果 -->  
  4. <FrameLayout xmlns:Android="http://schemas.android.com/apk/res/android"  
  5.     android:layout_width="fill_parent"  
  6.     android:layout_height="fill_parent"  
  7.     android:orientation="vertical" >  
  8.   
  9.     <!-- ImageView用来显示背景 -->  
  10.     <ImageView  
  11.         android:id="@+id/iv"  
  12.         android:layout_width="fill_parent"  
  13.         android:layout_height="fill_parent"  
  14.         android:src="@drawable/a01"  
  15.          />  
  16.       
  17.     <!-- Gallery来展示画廊 -->  
  18.     <Gallery xmlns:android="http://schemas.android.com/apk/res/android"  
  19.         android:id="@+id/gallery"  
  20.         android:layout_width="fill_parent"  
  21.         android:layout_height="wrap_content"  
  22.         android:spacing="5dp"  
  23.         />  
  24. </FrameLayout>  
其中我们使用FrameLayout来实现叠加效果,使用ImageView来显示大图,Gallery来展示画廊,android:spacing="5dp" 属性则是用来设置元素之间的间隔。4、在res/values/目录中新建一个attrs.xml内容如下:其中我们使用FrameLayout来实现叠加效果,使用ImageView来显示大图,Gallery来展示画廊,android:spacing="5dp" 属性则是用来设置元素之间的间隔。4、在res/values/目录中新建一个attrs.xml内容如下:其中我们使用FrameLayout来实现叠加效果,使用ImageView来显示大图,Gallery来展示画廊,android:spacing="5dp" 属性则是用来设置元素之间的间隔。   4、在res/values/目录中新建一个attrs.xml内容如下:   [html] view plaincopyprint?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.         <declare-styleable name="HelloGallery">  
  4.                 <attr name="android:galleryItemBackground"/>  
  5.         </declare-styleable>  
  6. </resources>  
5、在MainHelloGallery.java中的内容如下:5、在MainHelloGallery.java中的内容如下:5、在Test_galleryActivity.java中的内容如下:
  1. package m.m.m;  
  2.   
  3. import android.app.Activity;  
  4.   
  5. import android.content.Context;  
  6.   
  7. import android.content.res.TypedArray;  
  8.   
  9. import android.os.Bundle;  
  10.   
  11. import android.view.View;  
  12.   
  13. import android.view.ViewGroup;  
  14.   
  15. import android.widget.AdapterView;  
  16.   
  17. import android.widget.AdapterView.OnItemClickListener;  
  18.   
  19. import android.widget.BaseAdapter;  
  20.   
  21. import android.widget.Gallery;  
  22.   
  23. import android.widget.ImageView;  
  24.   
  25. import android.widget.Toast;  
  26.   
  27. public class Test_galleryActivity extends Activity {  
  28.   
  29.     /** Called when the activity is first created. */  
  30.   
  31.     @Override  
  32.     public void onCreate(Bundle savedInstanceState) {  
  33.   
  34.         super.onCreate(savedInstanceState);  
  35.   
  36.         setContentView(R.layout.main);  
  37.   
  38.         // 定义UI组件   
  39.   
  40.         final ImageView iv = (ImageView) findViewById(R.id.iv);  
  41.   
  42.         Gallery g = (Gallery) findViewById(R.id.gallery);  
  43.   
  44.         // 设置图片匹配器   
  45.   
  46.         g.setAdapter(new ImageAdapter(this));  
  47.   
  48.         // 设置AdapterView点击监听器,Gallery是AdapterView的子类   
  49.   
  50.         g.setOnItemClickListener(new OnItemClickListener() {  
  51.   
  52.             @Override  
  53.             public void onItemClick(AdapterView<?> parent, View view,  
  54.   
  55.             int position, long id) {  
  56.   
  57.                 // 显示点击的是第几张图片   
  58.   
  59.                 Toast.makeText(Test_galleryActivity.this"" + position,  
  60.   
  61.                 Toast.LENGTH_LONG).show();  
  62.   
  63.                 // 设置背景部分的ImageView显示当前Item的图片   
  64.   
  65.                 iv.setImageResource(((ImageView) view).getId());  
  66.   
  67.             }  
  68.   
  69.         });  
  70.   
  71.     }  
  72.   
  73.     // 定义继承BaseAdapter的匹配器   
  74.   
  75.     public class ImageAdapter extends BaseAdapter {  
  76.   
  77.         // Item的修饰背景   
  78.   
  79.         int mGalleryItemBackground;  
  80.   
  81.         // 上下文对象   
  82.   
  83.         private Context mContext;  
  84.   
  85.         // 图片数组   
  86.   
  87.         private Integer[] mImageIds = { R.drawable.a01,  
  88.   
  89.         R.drawable.a02, R.drawable.a03,  
  90.   
  91.         R.drawable.a04, R.drawable.a05,  
  92.   
  93.         R.drawable.a06, R.drawable.a07,  
  94.   
  95.         R.drawable.a08 };  
  96.   
  97.         // 构造方法   
  98.   
  99.         public ImageAdapter(Context c) {  
  100.   
  101.             mContext = c;  
  102.   
  103.             // 读取styleable资源   
  104.   
  105.             TypedArray a = obtainStyledAttributes(R.styleable.HelloGallery);  
  106.   
  107.             mGalleryItemBackground = a.getResourceId(  
  108.   
  109.             R.styleable.HelloGallery_android_galleryItemBackground, 0);  
  110.   
  111.             a.recycle();  
  112.   
  113.         }  
  114.   
  115.         // 返回项目数量   
  116.   
  117.         @Override  
  118.         public int getCount() {  
  119.   
  120.             return mImageIds.length;  
  121.   
  122.         }  
  123.   
  124.         // 返回项目   
  125.   
  126.         @Override  
  127.         public Object getItem(int position) {  
  128.   
  129.             return position;  
  130.   
  131.         }  
  132.   
  133.         // 返回项目Id   
  134.   
  135.         @Override  
  136.         public long getItemId(int position) {  
  137.   
  138.             return position;  
  139.   
  140.         }  
  141.   
  142.         // 返回视图   
  143.   
  144.         @Override  
  145.         public View getView(int position, View convertView, ViewGroup parent) {  
  146.   
  147.             ImageView iv = new ImageView(mContext);  
  148.   
  149.             iv.setImageResource(mImageIds[position]);  
  150.   
  151.             // 给生成的ImageView设置Id,不设置的话Id都是-1   
  152.   
  153.             iv.setId(mImageIds[position]);  
  154.   
  155.             iv.setLayoutParams(new Gallery.LayoutParams(120160));  
  156.   
  157.             iv.setScaleType(ImageView.ScaleType.FIT_XY);  
  158.   
  159.             iv.setBackgroundResource(mGalleryItemBackground);  
  160.   
  161.             return iv;  
  162.   
  163.         }  
  164.   
  165.     }  
  166.   
  167. }   
至此,完成以上功能。   总结: 1、定义Gallery 2、在res/values下 自定义attrs.xml文件   我们点击某一张图片,会把该子元素的图片显示在放在后面一层的ImageView组件中。我们点击某一张图片,会把该子元素的图片显示在放在后面一层的ImageView组件中。我们点击某一张图片,会把该子元素的图片显示在放在后面一层的ImageView组件中。我们点击某一张图片,会把该子元素的图片显示在放在后面一层的ImageView组件中。我们点击某一张图片,会把该子元素的图片显示在放在后面一层的ImageView组件中。我们点击某一张图片,会把该子元素的图片显示在放在后面一层的ImageView组件中。

更多Android相关信息见Android 专题页面 http://www.bkjia.com/topicnews.aspx?tid=11

相关内容