Android入门/Gallery(十三)

公共类

Gallery

extends  AbsSpinner
implements   GestureDetector.OnGestureListener
java.lang.Object的
   ↳ android.view.View
     ↳ android.view.ViewGroup
       ↳ android.widget.AdapterView <T延伸  android.widget.Adapter >
         ↳ android.widget.AbsSpinner
           ↳ android.widget.Gallery

这个类被废弃了。
不再支持这个控件。其他水平滚动的部件包括HorizontalScrollView的 支持库ViewPager

大致写上这个类的使用过程

在学习过程中发现,好多次把资源图片等文件放进项目之后R.java就报错,不得其解。

然后细心的发现,每次报错都遇到这样的情况:

  • 文件名称纯数字
  • 大写字母

然后Google一下才知道:

 资源文件只能以小写字母和下划线做首字母,且名称中只能出现 [a-z0-9_.] 这些字符。

UI  activitu_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"  
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    	<Gallery 
    	    android:id="@+id/gallery"
    	    android:layout_width="fill_parent"
    	    android:layout_height="fill_parent"
    	    />
</LinearLayout>

Java 代码

public class MainActivity extends Activity {
    
	private Gallery mGallery;  
      
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        PreInitUI();
        InitUI();
        PostInitUI();
    }  
    // First  找到控件 为InitUI()做准备
    private void PreInitUI()
    {
    	 setContentView(R.layout.activity_main);   
         mGallery = (Gallery)findViewById(R.id.gallery);    	
    }
    // Second 加载适配器 
    private void InitUI(){
    	 try {  
             mGallery.setAdapter(new ImageAdapter(this));  
         } catch (IllegalArgumentException e) {  
             // TODO Auto-generated catch block  
             e.printStackTrace();  
         } catch (IllegalAccessException e) {  
             // TODO Auto-generated catch block  
             e.printStackTrace();  
         }  
    }
    // Third 设置事件
    private void PostInitUI(){
        mGallery.setOnItemClickListener(new OnItemClickListener() 
        {  
            public void onItemClick(AdapterView parent, View v, int position, long id) {  
            	MainActivity.this.setTitle(String.valueOf(position));  
            }  
        });
    }
    //  内部类  ImageAdapter 
    private class ImageAdapter extends BaseAdapter{  
    	
        private Context mContext;  
        private ArrayList<Integer> imgList=new ArrayList<Integer>();  	//  id
        private ArrayList<Object> imgSizes=new ArrayList<Object>();  	// width heigth
        
        public ImageAdapter(Context c) throws IllegalArgumentException, IllegalAccessException{  
            mContext = c;  
            //数据源
            mField();
        }  
        
        private void mField() throws IllegalArgumentException, IllegalAccessException
        {
        	
        	/*  1  . 用反射机制来获取资源中的图片ID和尺寸  
        	 * Tip:
        	 * 		Field[] id = R.drawable.class.getDeclaredFields(); 		获取资源id集 返回值是数组
        	 * 		Field id = R.drawable.class.getDeclaredField("name");   获取指定资源名称的id 		
        	 */  
            Field[] fields = R.drawable.class.getDeclaredFields();  
            
            for (Field field : fields)  
            {  
                if (!"icon".equals(field.getName()))//除了icon之外的图片  
                {     
                    int index=field.getInt(R.drawable.class);  // 指定资源的内存地址 id
                    //保存图片ID  
                    imgList.add(index);  
                    //保存图片大小  
                    int size[]=new int[2];  
                    /*
                     * 		BitmapFactory.decodeResource(Resources res, int id);
                     * 		方法描述: 将指定资源id 解码成 一个Bitmap对象 ]
                     * 		返回值 : Bitmap ,并可请求位图的长宽
                     * */
                    Bitmap bmImg=BitmapFactory.decodeResource(getResources(),index);  
                    size[0]=bmImg.getWidth();
                    size[1]=bmImg.getHeight();  
                    imgSizes.add(size);  
                }  
            }  
        	
        }
        
        public int getCount() {  
            // TODO Auto-generated method stub  
            return imgList.size();  
        }  
  
        @Override  
        public Object getItem(int position) {  
            // TODO Auto-generated method stub  
  
            return position;  
        }  
  
        @Override  
        public long getItemId(int position) {  
            // TODO Auto-generated method stub  
  
            return position;  
        }  
        
        /* 2  . 点击图片 事件*/
        public View getView(int position, View convertView, ViewGroup parent) {  
       
            ImageView i = new ImageView (mContext);  
            //请求指定position的资源id 
            i.setImageResource(imgList.get(position).intValue());  	
            /*
             * Tips:
             * 			setScaleType()
             * 			控制图像应如何调整大小或移动,以配合这个ImageView的大小。
             * 	setScaleTypeAPI : 	http://developer.android.com/reference/android/widget/ImageView.html#attr_android:scaleType 
             * */
            i.setScaleType(ImageView.ScaleType.CENTER_CROP);  
            //从imgSizes取得图片大小  
            int size[]= new int[2];  
            size=(int[]) imgSizes.get(position);  
            i.setLayoutParams(new Gallery.LayoutParams(size[0], size[1]));  
            return i;  
        }  
          
    }
    
}


你可能感兴趣的:(Android入门/Gallery(十三))