android Gallery滑动图片

本文详细介绍如何使用Android中的Gallery控件创建一个缩略图浏览器。包括在XML文件中声明Gallery控件,通过Java代码为其设置适配器以显示图片,并添加监听器以实现交互功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可以通过鼠标或者手指触摸来移动它,产生动态的图片滚动效果,还可以根据你的点击或者触摸触发其他事件响应.这里通过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);
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值