可以通过鼠标或者手指触摸来移动它,产生动态的图片滚动效果,还可以根据你的点击或者触摸触发其他事件响应.这里通过Gallery在UI上实现缩略图浏览器。
首先在XML文件中申明一个ID为gallery的控件
<Gallery
android:id="@+id/gallery"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
在Java代码中调用Gallery gallery = ((Gallery) findViewById(R.id.gallery));
gallery.setAdapter(new ImageAdApter(this));
一般情况下,我们在Android中要用到类似这种图片容器的控件,都需要为它指定一个适配器,让它可以把内容按照我们定义的方式来显示,因此我们来给它加一个适配器,至于这个适配器如何实现,后面接着来操作,这里只需知道这个适配器的类叫ImageAdapter。
gallery.setAdapter(new ImageAdapter(this));继续定义适配器
public class ImageAdApter extends BaseAdapter{
private Context myContext;
//使用android.R.drawable里面的图片作为图库源。类型为整数数组
private int[] myImageIds = {
R.drawable.pp1,
R.drawable.pp2,
R.drawable.pp3,
R.drawable.pp4,
R.drawable.pp5,
R.drawable.pp6
};
//构造器只有一个参数,即要存储的Context
public ImageAdApter(Context c){
this.myContext = c;
}
//返回所有已定义的图片总数量
@Override
public int getCount() {
// TODO Auto-generated method stub
return this.myImageIds.length;
}
//取得目前容器图像的数组ID
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
//取得目前要显示的图像view,传入数组ID值使之读取与成像
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
//创建一个Imageview对象
ImageView i = new ImageView(this.myContext);
i.setImageResource(this.myImageIds[position]);
i.setScaleType(ImageView.ScaleType.FIT_XY);
//设置这个ImageView对象的宽高
i.setLayoutParams(new Gallery.LayoutParams(900, 800));
return i;
}
//根据中央的位移量,利用getScale返回views的大小
public float getScale(boolean focused,int offset){
return Math.max(0, 1.0f/(float)Math.pow(2, Math.abs(offset)));
}
}
至此,整个Gallery基本都是先完成了,我们还需要为它添加一个监听器,否则这个缩略图浏览器就仅仅只可以看不能用了。
这个是拖动的监听事件,就是把图片拖过去出现下一张的时候触发。
gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
Log.e("tag", "msg");
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
//这里不做响应
Log.e("pi", "p");
}
});
这个点击图片时触发
gallery.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,""+arg2,Toast.LENGTH_SHORT).show();
}
});
通过xml文件对item的格式进行设置。
我们在res/values/下面增加一个xml文件,用于描述自定义widget的属性格式为
declare-styleable是给自定义控件添加自定义属性用的
<resources>
<declare-styleable name="Hello">
<attr name="android:galleryItemBackground" />
</declare-styleable>
</resources>
我们设置一个android已定义的属性galleryItembackground,它定义一个具有一个边框的gallery的item
public ImageAdApter(Context c){
.......
TypedArray a = obtainStyledAttributes(R.styleable.Hello);
mGallery = a.getResourceId(R.styleable.Hello_android_galleryItemBackground, 0);//获得该属性的ID,如果没有发现该属性,则返回defaultId的值。
a.recycle();//在使用obtainStyledAttributes()后应调用,是的可以被系统重用。
}
public View getView(int position, View convertView, ViewGroup parent) {
i.setBackgroundResource(mGallery);
}