首页 > 系统 > Android > 正文

Android入门之Gallery用法实例解析

2020-04-11 11:46:34
字体:
来源:转载
供稿:网友

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

该实例代码运行的效果图如下:

 

main.xml源码如下:

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

Java程序源码如下:

package com.testImageView;  import java.lang.reflect.Field; import java.util.ArrayList;  import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageView; import android.widget.AdapterView.OnItemClickListener;  public class testImageView extends Activity {   private Gallery mGallery;   @Override   public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);          mGallery = (Gallery)findViewById(R.id.gallery);     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();     }     mGallery.setOnItemClickListener(new OnItemClickListener() {       public void onItemClick(AdapterView parent, View v, int position, long id) {         testImageView.this.setTitle(String.valueOf(position));       }     });   }      /*    * class ImageAdapter is used to control gallery source and operation.    */   private class ImageAdapter extends BaseAdapter{     private Context mContext;     private ArrayList<Integer> imgList=new ArrayList<Integer>();     private ArrayList<Object> imgSizes=new ArrayList<Object>();     public ImageAdapter(Context c) throws IllegalArgumentException, IllegalAccessException{       mContext = c;              //用反射机制来获取资源中的图片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           imgList.add(index);           //保存图片大小           int size[]=new int[2];           Bitmap bmImg=BitmapFactory.decodeResource(getResources(),index);           size[0]=bmImg.getWidth();size[1]=bmImg.getHeight();           imgSizes.add(size);         }       }     }     @Override     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;     }      @Override     public View getView(int position, View convertView, ViewGroup parent) {       // TODO Auto-generated method stub        ImageView i = new ImageView (mContext);       //从imgList取得图片ID       i.setImageResource(imgList.get(position).intValue());       i.setScaleType(ImageView.ScaleType.FIT_XY);       //从imgSizes取得图片大小       int size[]= new int[2];       size=(int[]) imgSizes.get(position);       i.setLayoutParams(new Gallery.LayoutParams(size[0], size[1]));       return i;     }        }; }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表