本文来自肥宝传说之路,引用必须注明出处!
Gallery是Android查看图片的一个工具,用户使用非常方便。
可以通过左右滑动来查看不同的图片
代码比较简单,但是还是搞了一整天,因为碰到了一些问题。
主要是图片的来源问题,这里是通过Java的映射机制和R文件来获得drawable目录下的图片。
不过要注意,drawable类里面是有很多系统本身的属性,有些是不能显示出来的,所以要过滤,否则会报错。
另外放在drawable里面的图片,必须是png格式的。解决这两个问题就好办很多了。
activity_hello_world.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>
HelloWorldActivity.java
package com.fable.helloworld; 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 HelloWorldActivity extends Activity { private Gallery mGallery; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_hello_world); mGallery = (Gallery)findViewById(R.id.gallery); try { mGallery.setAdapter(new ImageAdapter(this)); //设置适配器,Android很多显示的东西都是弄成适配器放进去就行了 } catch (IllegalArgumentException e) {//异常捕抓,Java有个异常机制,声明了throw就必须写代码去try-catch,c++好像没有 e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } mGallery.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { HelloWorldActivity.this.setTitle(String.valueOf(position)); //点击的时候显示位置在标题处 } }); } /* * 类ImageAdapter用来控制图片 */ 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; //通过系统本身的反射机制来获取图片资源。 //这里获取的是drawable目录下的图片, //这个目录下,图片必须是png的,否则启动的时候回报错 Field[] fields = R.drawable.class.getDeclaredFields(); //getDeclaredFields函数是Java本身的函数,获取类的属性 for (Field field : fields) { if (field.getName().startsWith("fable"))//getName获取属性名,这里是规定以fable开头 { int index=field.getInt(R.drawable.class); //获取属性的值,整形的,这里可能会报错 //保存图片ID imgList.add(index); //保存图片大小 int size[]=new int[2]; Bitmap bmImg=BitmapFactory.decodeResource(getResources(),index);//通过id来获取图片对象 size[0]=bmImg.getWidth();//获取图片大小 size[1]=bmImg.getHeight(); imgSizes.add(size); } } } @Override public int getCount() { //列表中的图片总数 return imgList.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 i = new ImageView (mContext); //从imgList取得图片ID i.setImageResource(imgList.get(position).intValue()); //通过id获取图片 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; } } }
可能会有些人搞不定,可以下载代码,点击打开链接