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;
}
}
}