- 浏览: 173114 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
dupeng41255:
问一下,。com的接口 是不是需要注册啊?我调用的时候返回说需 ...
java实现whois域名查询 -
feiyu86:
比喻的非常贴切。。
synchronized方法和代码块的使用 -
罡风笑:
贴结果:CBH 蜀汉 绝顶 刀客
开心一下 你古代的身份。超级好玩~
Android的gallery实现无限循环和降低选择频率
- 博客分类:
- Android
gallery是一个很好用的控件,可以实现很炫的效果。不过有的时候要对gallery进行改造,使其效果更完美。
Gallery组件主要用于横向显示图像列表,不过按常规做法。Gallery组件只能有限地显示指定的图像。也就是说,如果为Gallery组件指定了10张图像,那么当Gallery组件显示到第10张时,就不会再继续显示了。为了实现像UCWeb的循环显现导航菜单,要进行相应的改造。
循环显示有些类似于循环链表,最后一个结点的下一个结点又是第1个结点。循环显示图像也可以模拟这一点。
如果这时Gallery组件正好显示到最后一个图像,position参数值正好为getCount() - 1。那么我们如何再让Gallery显示下一个图像呢?也就是说让position参数值再增1,对!将getCount()方法的返回值也增1。
那么这里还有一个问题,如果position参数值无限地增加,就意味着resIds数组要不断地增大,这样会大大消耗系统的资源。想到这,就需要解决两个问题:既要position不断地增加,又让resIds数组中保存的图像资源ID是有限的,该怎么做呢?对于getCount()方法非常好解决,可以让getCount方法返回一个很大的数,例如,Integer.MAX_VALUE。这时position参数值就可以随着Gallery组件的图像不断向前移动而增大。现在resIds数组只有15个元素,如果position的值超过数组边界,要想继续循环取得数组中的元素(也就是说,当position的值是15时,取resIds数组的第0个元素,是16时取第1个元素),最简单的方法就是取余,代码如下:
resIds[position % resIds.length]
对ImageAdapter类做了如下两个改进:
1. 使getCount方法返回一个很大的值。建议返回Integer.MAX_VALUE。
2. 在getView方法中通过取余来循环取得resIds数组中的图像资源ID。
通过上面两点改进,可以使图像列表在向右移动时会循环显示图像。当然,这种方法从本质上说只是伪循环,也就是说,如果真把图像移动到getCount方法返回的值那里,那也就显示到最后一个图像的。不过在这里getCount方法返回的是Integer.MAX_VALUE,这个值超过了20亿,除非有人真想把图像移动到第20亿的位置,否则Gallery组件看着就是一个循环显示图像的组件。代码如下:
view plaincopy to clipboardprint?
01.public class ImageAdapter extends BaseAdapter
02. {
03. int mGalleryItemBackground;
04. private Context mContext;
05.
06. public ImageAdapter(Context context)
07. {
08. mContext = context;
09. TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);
10. mGalleryItemBackground = typedArray.getResourceId(
11. R.styleable.Gallery_android_galleryItemBackground, 0);
12. }
13. // 第1点改进,返回一个很大的值,例如,Integer.MAX_VALUE
14. public int getCount()
15. {
16. return Integer.MAX_VALUE;
17. }
18.
19. public Object getItem(int position)
20. {
21. return position;
22. }
23.
24. public long getItemId(int position)
25. {
26. return position;
27. }
28.
29. public View getView(int position, View convertView, ViewGroup parent)
30. {
31. ImageView imageView = new ImageView(mContext);
32. // 第2点改进,通过取余来循环取得resIds数组中的图像资源ID
33. imageView.setImageResource(resIds[position % resIds.length]);
34. imageView.setScaleType(ImageView.ScaleType.FIT_XY);
35. imageView.setLayoutParams(new Gallery.LayoutParams(163, 106));
36. imageView.setBackgroundResource(mGalleryItemBackground);
37. return imageView;
38. }
39. }
public class ImageAdapter extends BaseAdapter
{
int mGalleryItemBackground;
private Context mContext;
public ImageAdapter(Context context)
{
mContext = context;
TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);
mGalleryItemBackground = typedArray.getResourceId(
R.styleable.Gallery_android_galleryItemBackground, 0);
}
// 第1点改进,返回一个很大的值,例如,Integer.MAX_VALUE
public int getCount()
{
return Integer.MAX_VALUE;
}
public Object getItem(int position)
{
return position;
}
public long getItemId(int position)
{
return position;
}
public View getView(int position, View convertView, ViewGroup parent)
{
ImageView imageView = new ImageView(mContext);
// 第2点改进,通过取余来循环取得resIds数组中的图像资源ID
imageView.setImageResource(resIds[position % resIds.length]);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setLayoutParams(new Gallery.LayoutParams(163, 106));
imageView.setBackgroundResource(mGalleryItemBackground);
return imageView;
}
}
gallery菜单滑动有一个不好的效果就是每次经过中间的菜单都默认是被选中状态,同时会加载数据 以至于切换不流畅,有一种卡卡的感觉!!其实用线程来处理这个问题,一定的时间后如果选择的index值不变,说明已经稳定不变。
private int showingIndex = -1;
private static final int TIME_OUT_DISPLAY =300;
private int toShowIndex = 0;
//--------------------------------------------------
//在选中事件里面做处理
public void onItemSelected(AdapterView<?> parent, View v, final int position,
long id) {
//--------------------------------------------------
toShowIndex = position;
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(showingIndex != toShowIndex){
showingIndex = toShowIndex;
menu_position = position;
//做你的业务逻辑处理
}
}
};
Thread checkChange = new Thread() {
@Override
public void run() {
int myIndex = toShowIndex;
try {
sleep( TIME_OUT_DISPLAY );
if( myIndex == toShowIndex ){
handler.sendEmptyMessage(0);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
checkChange.start();
.
}
来自:http://www.eoeandroid.com/thread-54390-1-1.html
发表评论
-
Android 属性动画(Property Animation) 完全解析 (下)
2016-02-22 14:49 1032版权声明:本文为博主原创文章,未经博主允许不得转载。 ... -
Android 属性动画(Property Animation) 完全解析 (上)
2016-02-22 14:47 699版权声明:本文为博主原创文章,未经博主允许不得转载。 ... -
Windows系统中Maven的安装与配置以及m2eclipse插件的安装
2014-04-30 16:06 1165近期公司的一个项目需要用maven搭建,所以把maven的环 ... -
Gallery自动循环滚动,手动滚动的平滑切换及存在问题
2012-11-06 10:51 3506来自:http://blog.csdn.net/lenghun ... -
Gallery自动循环滚动,手动滚动的平滑切换及存在问题
2012-11-06 10:34 7来自:http://blog.csdn.net/lenghun ... -
VLC for Android on Linux
2012-07-12 14:28 1913来自:http://wiki.videolan.org/And ... -
Android模拟器对应电脑键盘快捷键
2012-01-10 00:01 1369Home键(小房子键) 在键盘上映射的是home键。 ... -
Android编译问题:Only 64-bit build environments are supported beyond froyo/2.2
2011-03-07 19:01 1108在使用: $ repo init -u git://An ... -
任务管理器正在运行的程序(2)
2010-12-23 14:36 1686RunningTaskInfo AndroidManifes ... -
任务管理器正在运行的程序(1)
2010-12-23 14:26 1499RunningTaskInfo 范例说明 ... -
android 监听文件和目录的创建删除移动等事件
2010-11-11 15:14 1739android.os下的FileObserver类是一个 ... -
animation知识学习
2010-10-22 14:07 2010LinearInterpolator 变化率是个常数,即 f ... -
Android 页面切换动画效果
2010-10-18 12:54 4134在Android 2.0之后有了ove ... -
android自适应屏幕方向和大小
2010-09-27 16:51 1726一:不同的layoutAndroid手机屏幕大小不一,有 ... -
Android图片处理的的一些方法
2010-08-02 18:54 63091.图片加载方法,方便用户加载图片 /**** 加载本地图片 ... -
OMA-SyncML-DataSyncProtocol-V1_1_2-20030612-A
2010-07-02 12:12 639手机联系人等信息同步中使用 -
Android取得屏幕分辨率
2010-05-31 10:32 920WindowManager windowManager = g ... -
Content Providers
2010-03-04 23:21 1171来源:http://developer.andro ... -
Android基础 : Android Content Provider[转]
2010-03-02 23:09 1063Android应用程序可以使用文件或SqlLite数据库来存储 ... -
Android 联系人开发- 保存联系人
2010-03-02 22:46 4723最近在开发android平台的联系人部分,有点总结和大家分享一 ...
相关推荐
Android3D画廊Gallery实现无限循环、自动跳转、倒影效果,可根据不同情况自己设置图片间间距,从而改变整体间距样式。
android Gallery 3d实现无限循环播放 用做广告板最后了 有多种效果 有倒影 能无限循环播放 当滑动到最后的时候 能反过来播放
UI开发第七篇之Android gallery实现图片的循环旋转UI开发第七篇之Android gallery实现图片的循环旋转
UI开发之Android gallery实现图片的循环旋转 UI开发之Android gallery实现图片的循环旋转 UI开发之Android gallery实现图片的循环旋转 UI开发之Android gallery实现图片的循环旋转
Android Gallery 3张图无限循环 左右滑动都有效
android Gallery实现异步加载网络图片 并只加载当前停止页面图.zip
Android Gallery 自定义ImageView和Gallery实现图片浏览功能,类似Android图库软件,主要实现的功能有:图片左右滑动、放大缩小、放大弹回、缩小弹回。 一开始使用Viewpager实现图片浏览,发现两张图片滑动时没有...
android Gallery 实现无线循环代码。
Gallery无限循环.zip
实现网络图片和本地图片循环播放
ViewPager 无限滚动 gallery效果
android Gallery实现异步加载网络图片 并只加载当前停止页面图
Gallery实现广告循环 Gallery实现广告循环
Android HorizontalScrollView实现横向Gallery
android gallery的使用 可以 循环 带左右按钮控制 选中时图片放大
可以android里德gallery的图片无限循环
android gallery简单应用,里面有对gallery源码例子
Gallery选中高亮和无限循环,http://blog.csdn.net/cmdkmd/article/details/7576307
android gallery例子android gallery例子android gallery例子
android--Gallery的实现