Gallery画廊预览效果

实现画廊效果,并点击小图展示大图:
1.不用传统的资源获取方法,而是通过反射得到所有公有或私有的资源声明区域

//drawable的声明区域(通过反射来得到所有公有或私有的资源)
Field[] myfields = R.drawable.class.getDeclaredFields();

2.通过该区域可以得到其中每一个资源的ID

//通过区域得到里面每一个图片资源的ID(R.drawable.class)
int index = myfields[i].getInt(R.drawable.class);

3.测试证明,无论是jpg还是png的图片,凡是属于drawable的资源都可以反射出来
具体代码和页面实现:
xml部分:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#abcdef"
    android:orientation="vertical"
    tools:context=".MainActivity" >
    <ImageView
        android:id="@+id/myImg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2" />
    <Gallery
        android:id="@+id/mygallery"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:spacing="10dp" />
</LinearLayout>

MainActivity:

public class MainActivity extends Activity implements OnItemClickListener {
	private ImageView myImg;//大图
	private Gallery mygallery;//画廊
	private ImageAdapter imageAdapter;//适配器
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		myImg = (ImageView)findViewById(R.id.myImg);
		mygallery = (Gallery)findViewById(R.id.mygallery);
		imageAdapter = new ImageAdapter(this);
		mygallery.setAdapter(imageAdapter);
		mygallery.setOnItemClickListener(this);
	}
	
	private class ImageAdapter extends BaseAdapter{
		private Context mContext;
		//ID资源集合
		private ArrayList<Integer> myImgList = new ArrayList<Integer>();
		private ArrayList<Object> myImgSize = new ArrayList<Object>();
		
		public ImageAdapter(Context mContext) {
			super();
			this.mContext = mContext;
			try {
				//drawable的声明区域(通过反射来得到所有公有或私有的资源)
				Field[] myfields = R.drawable.class.getDeclaredFields();
				for(int i=0;i<myfields.length;i++){
					//通过区域得到里面每一个图片资源的ID(R.drawable.class)
					int index = myfields[i].getInt(R.drawable.class);
					myImgList.add(index);
					
					Bitmap bmImg = BitmapFactory.decodeResource(getResources(), index);
					int size[] = new int[2];//声明数组,指定长度,保存每张图片的宽、高
					size[0] = bmImg.getWidth();
					size[1] = bmImg.getHeight();
					myImgSize.add(size);//数组对象保存到集合中
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		@Override
		public int getCount() {
			return myImgList.size();
		}
		@Override
		public Object getItem(int position) {
			return myImgList.get(position);
		}
		@Override
		public long getItemId(int position) {
			return position;
		}
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ImageView imageView = new ImageView(mContext);
			//从资源集合中取value,intValue()方法把Integer类型转成int类型
			imageView.setImageResource(myImgList.get(position).intValue());
			imageView.setScaleType(imageView.getScaleType().FIT_XY);
			
			int size[] = new int[2];
			size = (int[])myImgSize.get(position);
			imageView.setLayoutParams(new Gallery.LayoutParams(size[0],size[1]));
			
			return imageView;
		}
	}
	@Override
	public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
		setTitle(String.valueOf(arg2+1));
		myImg.setImageResource(imageAdapter.myImgList.get(arg2).intValue());
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值