- 浏览: 176292 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
dupeng41255:
问一下,。com的接口 是不是需要注册啊?我调用的时候返回说需 ...
java实现whois域名查询 -
feiyu86:
比喻的非常贴切。。
synchronized方法和代码块的使用 -
罡风笑:
贴结果:CBH 蜀汉 绝顶 刀客
开心一下 你古代的身份。超级好玩~
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 1064版权声明:本文为博主原创文章,未经博主允许不得转载。 ... -
Android 属性动画(Property Animation) 完全解析 (上)
2016-02-22 14:47 729版权声明:本文为博主原创文章,未经博主允许不得转载。 ... -
Windows系统中Maven的安装与配置以及m2eclipse插件的安装
2014-04-30 16:06 1190近期公司的一个项目需要用maven搭建,所以把maven的环 ... -
Gallery自动循环滚动,手动滚动的平滑切换及存在问题
2012-11-06 10:51 3544来自: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 1942来自:http://wiki.videolan.org/And ... -
Android模拟器对应电脑键盘快捷键
2012-01-10 00:01 1424Home键(小房子键) 在键盘上映射的是home键。 ... -
Android编译问题:Only 64-bit build environments are supported beyond froyo/2.2
2011-03-07 19:01 1134在使用: $ repo init -u git://An ... -
任务管理器正在运行的程序(2)
2010-12-23 14:36 1736RunningTaskInfo AndroidManifes ... -
任务管理器正在运行的程序(1)
2010-12-23 14:26 1536RunningTaskInfo 范例说明 ... -
android 监听文件和目录的创建删除移动等事件
2010-11-11 15:14 1769android.os下的FileObserver类是一个 ... -
animation知识学习
2010-10-22 14:07 2036LinearInterpolator 变化率是个常数,即 f ... -
Android 页面切换动画效果
2010-10-18 12:54 4176在Android 2.0之后有了ove ... -
android自适应屏幕方向和大小
2010-09-27 16:51 1752一:不同的layoutAndroid手机屏幕大小不一,有 ... -
Android图片处理的的一些方法
2010-08-02 18:54 63291.图片加载方法,方便用户加载图片 /**** 加载本地图片 ... -
OMA-SyncML-DataSyncProtocol-V1_1_2-20030612-A
2010-07-02 12:12 672手机联系人等信息同步中使用 -
Android取得屏幕分辨率
2010-05-31 10:32 957WindowManager windowManager = g ... -
Content Providers
2010-03-04 23:21 1197来源:http://developer.andro ... -
Android基础 : Android Content Provider[转]
2010-03-02 23:09 1106Android应用程序可以使用文件或SqlLite数据库来存储 ... -
Android 联系人开发- 保存联系人
2010-03-02 22:46 4757最近在开发android平台的联系人部分,有点总结和大家分享一 ...
相关推荐
本教程将深入讲解如何在Android应用中实现一个3D画廊(Gallery)组件,支持无限循环、自动跳转以及倒影效果。 首先,我们需要理解`Gallery`组件。`Gallery`是Android提供的一个HorizontalScrollView的扩展,用于...
总的来说,"android_FancyCoverFlow"项目展示了如何利用自定义控件和动画来创建一个功能丰富的3D广告板,其无限循环和倒影效果增强了用户的交互体验。对于想要在Android应用中实现类似功能的开发者,深入研究这个...
在Android UI开发中,`Gallery`组件是一种可以展示多个项目并允许用户左右滑动选择的控件,常用于实现图片轮播或者选项选择等场景。本篇将详细讲解如何利用`Gallery`实现图片的循环旋转。 首先,我们需要在布局文件...
在这个场景中,提到的"Android Gallery 3张图无限循环 左右滑动都有效"是指一个特定的实现,即在`Gallery`中加载三张图片,并且当用户向左或向右滑动时,图片能够无缝地循环,形成一种无限滚动的效果。下面将详细...
在本教程中,我们将深入探讨如何利用ViewPager实现一个类似画廊(Gallery)的效果,并且让其能够无限循环滚动。 首先,我们要了解ViewPager的基本用法。ViewPager是Android Support Library的一部分,它允许用户在...
- 为了实现循环播放,我们需要维护一个包含所有图片(包括网络和本地)的列表或数组,可以是URL字符串列表(对于网络图片)或者Bitmap列表(对于本地图片)。 6. **监听器**: - 为Gallery设置`...
初始化`Gallery`时,我们可以通过`setSelection`方法设置一个较大的初始位置,这样当用户滚动到列表末尾时,图片会无缝过渡到开头,实现循环效果。例如: ```java gallery.setSelection(200); ``` 为了实现无限...
综上所述,"Gallery无限循环.zip"可能是一个涉及Android应用开发、图片浏览功能实现的项目,使用了旧版的Android组件和构建配置,同时包含了代码混淆的设置。开发者需要对Android SDK、Activity生命周期、布局设计...
在Android开发中,`Gallery`组件是一个非常有用的控件,它允许用户水平滑动浏览多个项目,常用于图片浏览或选项选择。本示例着重讲解如何在`Gallery`中实现异步加载网络图片,并且只加载当前显示的页面,以提高性能...
Android Gallery 自定义ImageView和Gallery实现图片浏览功能,类似Android图库软件,主要实现的功能有:图片左右滑动、放大缩小、放大弹回、缩小弹回。 一开始使用Viewpager实现图片浏览,发现两张图片滑动时没有...
在Android开发中,"无限循环...通过研究和理解这些代码,开发者可以学习如何在自己的项目中实现无限循环滑动的gallery效果。这种自定义组件的实现不仅能够提升应用的用户体验,也是对Android开发技能的深入理解和应用。
1. **无限循环**:原生的`Gallery`组件并不支持无限循环,但通过开发者们的智慧,可以通过巧妙地重置数据源和设置适配器来实现这一功能。当用户在最后一张图片向左滑动时,会显示第一张图片;反之,从第一张图片向右...
为了实现循环滚动,我们需要在`Gallery`的`onScroll`或`onItemSelectedListener`回调中调整当前选中的索引。当达到首尾时,将索引重新设置为相对另一端的下一项。例如: ```java gallery.setOnItemSelectedListener...
最后,如果你有一个名为“无限循环广告demo”的项目,那么它可能包含了完整的实现代码和资源文件,你可以参考该项目的代码来更好地理解`Gallery`广告循环的实现方式。 总的来说,通过使用Android的`Gallery`控件,...
android Gallery实现异步加载网络图片 并只加载当前停止页面图
在`Galleryone`这个压缩包文件中,可能包含了一个简单的`Gallery`无限循环的示例代码或者项目的源码,你可以下载并研究其中的实现细节,以便更深入地理解和应用这个功能。 总的来说,实现`Gallery`无限循环的关键...
在Android开发中,`Gallery`组件是一个非常有用的控件,它允许用户在多个项目中进行水平滑动选择,常用于图片浏览或者下拉菜单等场景。然而,原生的`Gallery`组件并不支持无限循环的功能,也就是说,当用户在最后一...
在这个特定的需求中,我们不仅需要让Gallery实现循环滚动,还要在选中图片时对其进行放大,并提供按钮来控制图片的左右切换,同时加入图片选中时的弹出动画效果。下面我们将详细讲解如何实现这些功能。 首先,我们...
综上所述,结合自定义适配器、监听器以及适当的滚动处理,我们可以实现`Gallery`组件的选中高亮和无限循环滚动效果。不过,需要注意的是,`Gallery`组件在Android API 16之后已被弃用,建议使用`RecyclerView`配合`...
在早期的Android版本中,`Gallery`是实现轮播效果的常见选择,但在Android 3.0(API级别11)之后,`ViewPager`逐渐取代了它的地位,因为`ViewPager`提供了更丰富的交互性和更好的性能。尽管如此,理解`Gallery`的...