Gallery视图和之前用到的Spinner视图,ListView视图等很类似,操作也异曲同工,都是需要Adapter来和数据源匹配起来。
基本上都是使用继承BaseAdapter来实现。
看着教程做的时候,发现设置了 没有选中列表项的透明度为0.6(选中的为1) 但是程序首次运行,显示正常,但是当滑动一次后,所有的列表项都变为透明的,上网查找,才发现,没有设置显示图片的背景/背景色,设置背景色为黑色后,一切正常。
xml代码
java代码
Gallery gallery;
int[] imageIds=new int[]
{
R.drawable.ic_launcher,
R.drawable.ic_launcher,
R.drawable.ic_launcher,
//R.drawable.ic_launcher,
//R.drawable.ic_launcher,
//R.drawable.ic_launcher,
//R.drawable.ic_launcher
}
;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_gallery);
gallery=(Gallery)findViewById(R.id.gallery);
BaseAdapter adapter=new BaseAdapter()
{
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ImageView imageView=new ImageView(TestGalleryActivity.this);
imageView.setImageResource(imageIds[position%imageIds.length]);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setLayoutParams(new Gallery.LayoutParams(75,100));
imageView.setBackgroundColor(Color.BLACK);
return imageView;
}
@Override
public long getItemId(int position)
{
// TODO Auto-generated method stub
return position;
}
@Override
public Object getItem(int position)
{
// TODO Auto-generated method stub
return position;
}
@Override
public int getCount()
{
// TODO Auto-generated method stub
return imageIds.length;
}
};
gallery.setAdapter(adapter);
}
主要就是getVIew中 imageView.setBackgroundColor(Color.BLACK); 以上只是一个简单的例子。
事件触发的监听器和其他视图都类似。
Gallery视图可以在一行显示多张图片(或其他信息),而且支持水平拖动,也就是说不需要再额外增加水平滚动条。貌似只能让最中间一个列表项作为选中的项,这样只能实现特定功能,不好控制。但是作为图片浏览很是有很多其他创意的,比如网上可以找到3D显示等等。
Gallery视图已过期,网上牛人解释是:不能通过它的适配器(Adapter)合适的使用convertView,也就是说在绘制一个展示时,不得不为每个item创建一个新的视图。(Gallery不能回收视图,浪费资源)