很多人会知道iphone可以用手指直接拖动图片移动,这个效果让苹果吸引了很多人的眼球,同时也为它积攒了很多粉丝,现在Android也可以通过Gallery来实现这一效果。
要实现这样的效果,必须事先要准备好你们要展示的图片,今天我们通过Gallery来实现滚动选择菜单,我们最好选择用一样规格的图片,这样切换起来效果上比较好,还有最好选择一些透明背景的PNG格式的图片,配上我们自己选择的背景,这样效果会更加完美,我们选择好了我们需要的图片后,需要用一个容器来存放这些要显示的图片,这里我们需要使用一个继承自BaseAdapter类的一个派生类来装这些图片,我们做的是滚动菜单所以要设置这些图片的监听事件,这样才能知道用户点击的是哪一张图片,当然添加监听事件的方法有很多。我们在继承BaseAdapter类编写自己的适配器的时候我们将所有要显示的图片的索引值存放在一个int数组中,然后我们通过setImageResource方法来设置ImageView要显示的图片资源,最后将每一张图片显示在屏幕上面。
同时我们还要实现无限向后延伸滑动的效果。
以下是全部代码:
main.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"
android:layout_gravity="center_vertical"
>
<Gallery
android:layout_width="320dip"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:id="@+id/gallery"/>
</LinearLayout>
ImageAdaper.java
package com.e7android.forum.test;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
public class ImageAdaper extends BaseAdapter {
private Context context;
private boolean[] selectFlags;
private Integer[] mImageIds =
{
R.drawable.bu1,
R.drawable.bu2,
R.drawable.bu3,
R.drawable.bu4,
R.drawable.bu5,
R.drawable.bu6,
R.drawable.bu7,
R.drawable.bu8,
};
public ImageAdaper(Context context) {
this.context = context;
selectFlags = new boolean[mImageIds.length];
//为每一个图标设置初始化标志位用来表示该图是否被选择了
for(int i=0;i<mImageIds.length;i++)
{
selectFlags[i] = false;
}
}
/**
* return 返回指定位置的图标是否被选择的标志位
*/
public boolean getSelectedFlags(int position)
{
return selectFlags[position%mImageIds.length];
}
/**
*
* @param position 目标位置
*
* @param flags 标志位
* 设置目标位置的标志位
*/
public void setSelectedFlags(int position,boolean flags)
{
selectFlags[position%mImageIds.length]=flags;
}
public int getCount() {
return Integer.MAX_VALUE;//返回一个整型的大数值,用来制作无限循环的效果
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position% mImageIds.length;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position% mImageIds.length;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(context);
/**
* 做无限循环的效果
*/
if(position<0)
{
position+=mImageIds.length;
}
imageView.setImageResource(mImageIds[position%mImageIds.length]);
imageView.setLayoutParams(new Gallery.LayoutParams(100,80));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
//假如该图被选择设置它的背景来显示
if(getSelectedFlags(position))imageView.setBackgroundDrawable((BitmapDrawable)context.getResources().getDrawable(R.drawable.selected));
return imageView;
}
}