/res/layout/main.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#ffffffff">
<ImageView
android:id="@+id/myImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
android:layout_gravity="center"/>
<Gallery
android:id="@+id/myGallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:spacing="10dp"
android:layout_weight="1"/>
</LinearLayout>
Java代码如下:
package com.demo.android.gallery;
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;
public class GalleryActivity extends Activity {
private ImageView myImageView;
private Gallery myGallery;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myImageView=(ImageView) findViewById(R.id.myImageView);
myGallery=(Gallery) findViewById(R.id.myGallery);
try {
myGallery.setAdapter(new ImageAdapter(GalleryActivity.this));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
myGallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
//将当前单击图片的位置显示在窗体标题栏
GalleryActivity.this.setTitle(String.valueOf(position));
try {
//将当前单击的图片显示到ImageView中
myImageView.setImageResource(new ImageAdapter(GalleryActivity.this).myImgList.get(position).intValue());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
});
}
private class ImageAdapter extends BaseAdapter{
private Context mContext;
private ArrayList<Integer> myImgList=new ArrayList<Integer>();
private ArrayList<Object> myImgSize=new ArrayList<Object>();
public ImageAdapter(Context context) throws IllegalArgumentException,IllegalAccessException{
this.mContext=context;
//获取资源中的图片Id和尺寸,通过反射机制来实现
Field[] myFields=R.drawable.class.getDeclaredFields();
for(int i=0;i<myFields.length;i++){
//除了icon之外的图片
if(!"ic_launcher".equals(myFields[i].getName())){
//获取图片ID
int index=myFields[i].getInt(R.drawable.class);
//保存图片ID到myImgList中
myImgList.add(index);
int[] size=new int[2];
Bitmap bmImg=BitmapFactory.decodeResource(getResources(), index);
size[0]=bmImg.getWidth();
size[1]=bmImg.getHeight();
myImgSize.add(size);
}
}
}
@Override
public int getCount() {
return myImgList.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView=new ImageView(mContext);
imageView.setImageResource(myImgList.get(position).intValue()); //从ImgList去的图片ID
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
int[] size=new int[2];
size=(int[]) myImgSize.get(position);
imageView.setLayoutParams(new Gallery.LayoutParams(size[0], size[1]));
return imageView;
}
}
}
代码下载: