zoukankan      html  css  js  c++  java
  • Android入门教程(二十三)之Gallery(转)

     本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!

           Android的Gallery控件是个很不错的看图控件,大大减轻了开发者对于看图功能的开发,而且效果也比较美观。本文介绍Gallery的用法,用反射机制来动态读取资源中的图片。

           本文的效果图:

     

    main.xml源码:

    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:orientation="vertical"  
    4.     android:layout_width="fill_parent"  
    5.     android:layout_height="fill_parent"  
    6.     >  
    7. <Gallery android:id="@+id/gallery" android:layout_height="fill_parent" android:layout_width="fill_parent"></Gallery>  
    8. </LinearLayout>  

     

    程序源码:

    1. package com.testImageView;  
    2.   
    3. import java.lang.reflect.Field;  
    4. import java.util.ArrayList;  
    5.   
    6. import android.app.Activity;  
    7. import android.content.Context;  
    8. import android.graphics.Bitmap;  
    9. import android.graphics.BitmapFactory;  
    10. import android.os.Bundle;  
    11. import android.view.View;  
    12. import android.view.ViewGroup;  
    13. import android.widget.AdapterView;  
    14. import android.widget.BaseAdapter;  
    15. import android.widget.Gallery;  
    16. import android.widget.ImageView;  
    17. import android.widget.AdapterView.OnItemClickListener;  
    18.   
    19. public class testImageView extends Activity {  
    20.     private Gallery mGallery;  
    21.     @Override  
    22.     public void onCreate(Bundle savedInstanceState) {  
    23.         super.onCreate(savedInstanceState);  
    24.         setContentView(R.layout.main);  
    25.           
    26.         mGallery = (Gallery)findViewById(R.id.gallery);  
    27.         try {  
    28.             mGallery.setAdapter(new ImageAdapter(this));  
    29.         } catch (IllegalArgumentException e) {  
    30.             // TODO Auto-generated catch block   
    31.             e.printStackTrace();  
    32.         } catch (IllegalAccessException e) {  
    33.             // TODO Auto-generated catch block   
    34.             e.printStackTrace();  
    35.         }  
    36.         mGallery.setOnItemClickListener(new OnItemClickListener() {  
    37.             public void onItemClick(AdapterView parent, View v, int position, long id) {  
    38.                 testImageView.this.setTitle(String.valueOf(position));  
    39.             }  
    40.         });  
    41.     }  
    42.       
    43.     /* 
    44.      * class ImageAdapter is used to control gallery source and operation. 
    45.      */  
    46.     private class ImageAdapter extends BaseAdapter{  
    47.         private Context mContext;  
    48.         private ArrayList<Integer> imgList=new ArrayList<Integer>();  
    49.         private ArrayList<Object> imgSizes=new ArrayList<Object>();  
    50.         public ImageAdapter(Context c) throws IllegalArgumentException, IllegalAccessException{  
    51.             mContext = c;  
    52.               
    53.             //用反射机制来获取资源中的图片ID和尺寸   
    54.             Field[] fields = R.drawable.class.getDeclaredFields();  
    55.             for (Field field : fields)  
    56.             {  
    57.                 if (!"icon".equals(field.getName()))//除了icon之外的图片   
    58.                 {     
    59.                     int index=field.getInt(R.drawable.class);  
    60.                     //保存图片ID   
    61.                     imgList.add(index);  
    62.                     //保存图片大小   
    63.                     int size[]=new int[2];  
    64.                     Bitmap bmImg=BitmapFactory.decodeResource(getResources(),index);  
    65.                     size[0]=bmImg.getWidth();size[1]=bmImg.getHeight();  
    66.                     imgSizes.add(size);  
    67.                 }  
    68.             }  
    69.         }  
    70.         @Override  
    71.         public int getCount() {  
    72.             // TODO Auto-generated method stub   
    73.   
    74.             return imgList.size();  
    75.         }  
    76.   
    77.         @Override  
    78.         public Object getItem(int position) {  
    79.             // TODO Auto-generated method stub   
    80.   
    81.             return position;  
    82.         }  
    83.   
    84.         @Override  
    85.         public long getItemId(int position) {  
    86.             // TODO Auto-generated method stub   
    87.   
    88.             return position;  
    89.         }  
    90.   
    91.         @Override  
    92.         public View getView(int position, View convertView, ViewGroup parent) {  
    93.             // TODO Auto-generated method stub   
    94.   
    95.             ImageView i = new ImageView (mContext);  
    96.             //从imgList取得图片ID   
    97.             i.setImageResource(imgList.get(position).intValue());  
    98.             i.setScaleType(ImageView.ScaleType.FIT_XY);  
    99.             //从imgSizes取得图片大小   
    100.             int size[]= new int[2];  
    101.             size=(int[]) imgSizes.get(position);  
    102.             i.setLayoutParams(new Gallery.LayoutParams(size[0], size[1]));  
    103.             return i;  
    104.         }  
    105.           
    106.     };  
    107. }  
  • 相关阅读:
    Java实现 LeetCode 667 优美的排列 II(暴力)
    Java实现 LeetCode 665 非递减数列(暴力)
    Java实现 LeetCode 665 非递减数列(暴力)
    Java实现 LeetCode 665 非递减数列(暴力)
    Java实现洛谷 P1873 砍树(StreamTokenizer+IO+二分)
    PHP RESTful
    PHP 获取图像宽度与高度
    PHP imagecolorclosesthwb
    PHP imagecolorclosestalpha
    PHP imagecolorclosest
  • 原文地址:https://www.cnblogs.com/l_dragon/p/2134585.html
Copyright © 2011-2022 走看看