一、Gallery

1、简述

  Gallery有道翻译为画廊,就叫它画廊控件,主要用来可切换的图片展示,左右滑动可以选择上一张或下一张图片。

个人感觉蛮实用的,不过google貌似不推荐使用啊!

2、常用属性和对应方法如下:

3、简单例子:

实现如下例子,C.C女王图片坐镇

Activity代码:

 // 要展示图片的ID数组
int[] imageIDs={
R.drawable.item0,R.drawable.item1,R.drawable.item2,
R.drawable.item3,R.drawable.item4,R.drawable.item5
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Gallery gl=(Gallery)this.findViewById(R.id.Gallery01);
// 适配器
BaseAdapter ba=new BaseAdapter() { //主要是重写getView 方法
@Override
public View getView(int position, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
ImageView iv = new ImageView(MainActivity.this); Log.v("gallery", position+""); iv.setImageResource(imageIDs[position]); iv.setScaleType(ImageView.ScaleType.FIT_XY);
iv.setLayoutParams(new Gallery.LayoutParams(188,250));
return iv;
} @Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
} @Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
} @Override
public int getCount() {
// TODO Auto-generated method stub //return imageIDs.length;
}
}; gl.setAdapter(ba); // 设置监听
gl.setOnItemClickListener(
new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
Gallery gl=(Gallery)findViewById(R.id.Gallery01);
gl.setSelection(arg2);
}
}
); }

布局文件较简单:

 <?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:gravity="center_vertical"
>
<Gallery
android:id="@+id/Gallery01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:spacing="10dip"
android:unselectedAlpha="1" />
</LinearLayout>

4、扩展例子:
  但是这样做有个弊端,就是图片滑动到最后一张就结束了,如果我想要查看第一张就得一张张的退回去
比较麻烦,不人性化。

  我们要实现循环切换图片,从最后一张可跳到第一张去。这时就要修改getCount和getView方法
getCount方法用于返回图像总数,这个总数不能大于图像的实际数(可以小于图像的实际数),否则会抛出越界异常。
当Gallery组件要显示某一个图像时,就会调用getView方法,并将当前的图像索引(position参数)传入该方法。
一般getView方法用于返回每一个显示图像的组件(ImageView对象)。从这一点可以看出,Gallery组件是即时显示图像的,
而不是一下将所有的图像都显示出来。在getView方法中除了创建了ImageView对象,还用从imageIDs数组中获得了相应的图像资源ID来设置在ImageView中显示的图像。

  实现循环切换主要就是当position等于最后一张图片时,它的下一张又回到第一张position = 0,这时我们想到了取余可以实现,
即position%imageIDs.length,值就在0~imageIDs.length-1之间,此时还要设置getCount的值为无穷大,防止抛出越界异常,
设return Integer.MAX_VALUE。

具体修改代码如下:

     public View getView(int position, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
ImageView iv = new ImageView(MainActivity.this); Log.v("gallery", position+""); //iv.setImageResource(imageIDs[position]);
//通过取余来循环取得imageIDs数组中的图像资源ID
iv.setImageResource(imageIDs[position%imageIDs.length]); iv.setScaleType(ImageView.ScaleType.FIT_XY);
iv.setLayoutParams(new Gallery.LayoutParams(188,250));
return iv;
} @Override
public int getCount() {
// TODO Auto-generated method stub //return imageIDs.length;
// 返回一个很大的值,例如,Integer.MAX_VALUE
return Integer.MAX_VALUE;
}
};

实现效果:

如果有人爱钻牛角尖就会发现,apk启动时第一张不能切换到最后一张。

  我曾想getItemId返回的position一开始不是0,而是中间值就行了,比如设为position+imageIDs.length*10,在getView()传入position和getItemId返回的position设为position+imageIDs.length*10均告失败,日志打印的position初始值都为0,不起作用,还是不能跳到最后一张。后来上网搜了下Gallery有个setSelection可以设置当前position,加入代码,显示成功。

         gl.setSelection(imageIDs.length*10);

最新文章

  1. C#中HttpClient使用注意:预热与长连接
  2. 使用Ubuntu 12.04作为日常电脑环境
  3. SearchLookUpEdit
  4. C++中输入输出的重定向
  5. 如何使用NodeJs来监听文件变化
  6. 【BZOJ 2818】gcd 欧拉筛
  7. jeecg团队招新人(5人)
  8. android recover 系统代码分析 -- 选择进入
  9. 【小练习05】HTML+CSS--淘宝商铺小页面
  10. [USACO 3.3.1]骑马修栅栏t
  11. 项目总结一:响应式之CSS3 媒体查询
  12. c#中treeview的使用方法(转 )
  13. pillow的用法
  14. MySQL 高性能优化实战总结
  15. Linux学习笔记10
  16. Linux中Cache内存占用过高解决办法
  17. Socket编程:之双机通信
  18. MyEclipse WebSphere开发教程:安装和更新WebSphere 6.1, JAX-WS, EJB 3.0(七)
  19. ASP.NET MVC Core的TagHelper (高级特性)
  20. 浅谈卡特兰数(Catalan number)的原理和相关应用

热门文章

  1. 漫长的补结题报告之路 poj3622
  2. UVa 673 (括号配对) Parentheses Balance
  3. C# List 使用方法 支持FrameWork2.0 环境
  4. PSR-4——新鲜出炉的PHP规范
  5. Maven配置文件Pom.xml详解
  6. JPA---一对一关系
  7. Entity Framework 增删改查和事务操作
  8. [转]javascript console 函数详解 js开发调试的利器
  9. JVM内存结构之一--总体介绍
  10. jquery 单行滚动、批量多行滚动、文字图片翻屏滚动效果代码