Android HorizonScrollView实现图片左右滑动

本文介绍了如何在Android应用中实现类似《过日子》App中的图片左右滑动功能,通过分析ViewPager、TabHost和Gallery的局限性,提出了使用HorizonScrollView的解决方案。通过设置布局和属性,成功避免了滚动条显示,实现了所需效果。
摘要由CSDN通过智能技术生成
     最近做一个项目,使用到了很特殊的交互方式,滑动的方式,模仿的是一个名叫《过日子》的App的iPhone界面,这款软件的交互做的比较好,下面是这款App的界面。
     
在界面中,主要是上方的一个可滑动的Page和下面的几张可滑动的图片组成,下面的每个图片可以左右滑动,并且点击相关的图片进入相关的功能。上面的可以滑动的Page使用的是Android官方提供的ViewPager实现的,在这篇博文中就不再赘述,关于ViewPager的使用的文章网上搜索很多,大家可以自己参考一下,编写出自己的App,下面着重需要知道的是如何实现下面的左右图片滑动功能。
     看到这个功能,你会怎么想?是什么呢?ViewPager?TabHost?Gallery?或者更多?笔者在这个过程中均一一试过了,但是效果不如人愿,和很多App开发者一样,笔者在做这个功能的时候发现很多的人也有类似的需求,但是好像没有人做出来,各大论坛上也没有这个解决方案,因此笔者将其实现,并将信息公布出来,供更多的和笔者一样的菜鸟参考。
     为什么不用ViewPager呢?ViewPager的作用是页面的切换,在这里用貌似不是对路的吧,因此笔者直接将其刷掉了。
     为什么不用TabHost呢?不错,笔者使用过了,并且也有一定的效果,但是离图中所示的效果还有很大的一段差距,并且相对来说实现的复杂度较高,灵活度下降,如上述界面所示,一个页面有很多类似的东西,试问是不是每一个你都用TabHost呢?是不是特别的麻烦呢?
     为什么不用Gallery?不错,笔者在TabHost尝试过后,也尝试过Gallery的使用,什么是Gallery?不错,画廊,她有什么特点呢?笔者相信通过查看API或者网上搜索,相关的信息很多,在这里就不说了,着重说一下问什么不好的原因吧。首先Gallery默认的选择图片是第一张,并且Gallery有一个特点,那就是选中的元素(图片)一定会居中,并且高亮,这点不用质疑吧,否则怎么突出你选择的图片的呢?那么就照成了一个问题,如果第一张照片被选中(Android中默认第一张被选中),那么图片的左边距会离屏幕左边有一定的间隔,虽然可以通过设置第N张图片居中或者设置第一张图片的边界Margins(代码设置)可以使第一张图片恰好处在屏幕边缘,那么当屏幕分辨率改变呢?该怎么办?为什么那一张是亮的?选中以后的图片会自动滑到中间并且变亮,可是我的App中不需要这个方面啊,可以通过重写控件取消这个效果么?对不起,貌似没有人做到,笔者登陆许多外文的Android论坛也没有发现解决办法,很悲剧,当你把效果做出来后你就发现这个并不符合你预期的效果。
     Gallery下,使第一张图片置左的代码如下,主要是设置了第一张图片的Margins,当然你也可以设置第N张居中,但是效果呢?不好说,呵呵。
            MarginLayoutParams mlp = (MarginLayoutParamsgallery.getLayoutParams();
            mlp.setMargins(-(metrics. widthPixels /2),
                           mlp.topMargin,
                           mlp.rightMargin,
                           mlp.bottomMargin
            );
    传入的对象为你定义的gallery对象,但是这段代码有很大的问题,那么,问题是什么呢?大家可以尝试一下,在滑动过程中,我们可以使用Log或者Toast显示你点击的元素位置,发现元素位置信息是错的,为什么呢?大家可以细细分析。
     说了这么多,直接进入主题吧,那么笔者是如何解决这个问题的呢?先看一下笔者的截图(比较简单的图,请大家见谅)

     是不是您想要的效果呢?也许是吧,左边的那个白色的方块可以删掉的,我只是在这个地方做个标签而已,左右滑动,使用Toast信息,完全正确,是否达到了你的要求呢?
     那么是如何实现的呢?
     想了许久,我想到了ScrollView,也许可以试一试,于是我使用LinearLayout嵌套了ScrollView,使屏幕的方向为水平方向,继而我发现了ScrollView还有HorizonScrollView,这岂不是更加的方便?于是我使用了HorizonScrollView,很多人也许会问,貌似当数据超过ScrollView的显示范围后,会有一个进度条类似的东西吧,是这样的么?  

     不错,笔者搞完后也发现了这个问题,这个还是与理想中的不符合啊,能不能去掉这个进度条的东东呢?且看ScrollView的属性
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值