显示周边部分子页面的viewpager(一屏显示多个子页面)

本文介绍了一种在智能电视上实现多屏数据展示的方法,通过部分显示周边子页面来提示用户翻页查看更多信息。文章提供了实现这一效果的代码示例,并解释了关键步骤如设置viewpager宽度和使用setClipChildren。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   由于智能电视并不像手机那样支持手势划屏,所以在电视上展示多屏数据时,需要提示用户翻页还有更多内容。

   一般使用较多的方法就是箭头提示,比如:

  还有一种更好的做法就是将下一页的部分展现出来,直观提示用户还有更多的页面。这种展现方式结合metro风格,被越来越广泛的盒子和电视厂商采用,例如小米,乐视等。

  下面我们就将动手实现一个类似风格的demo,省去若干查询资料,附代码。

  在代码中,实现了一个显示部分周边子页面的viewpager ,这个控件可以独立使用。在使用的时候需要注意的是:设置viewpager的宽度。

  这个宽度需要根据屏幕的宽度来计算,比如屏幕宽度1080像素,那么viewpager的宽度设置为960,那么viewpager的每个周边就可以露出60像素的宽度。

  效果的实现重点在于viewgroup的setClipChildren(false),表示是否限制子View在其范围内,在animations动画以及本文的情况下可以发挥很大的作用,默认为true。

  注意:setClipChildren(false)在3.0以上版本中,开启了硬件加速后将不能正常工作,所以需要将其设置为软件加速。

  设置软硬件加速使用 setLayerType(View.LAYER_TYPE_SOFTWARE, null); 为了能够在2.2系统中使用,我们使用反射完成该函数的调用,如下:

try {
         Method setLayerTypeMethod = this.getClass().getMethod("setLayerType" , new Class[] {int.class , Paint.class});
         setLayerTypeMethod.invoke( this, new Object[] {LAYER_TYPE_SOFTWARE , null});
     } catch (NoSuchMethodException e) {
         // Older OS, no HW acceleration anyway
     } catch (IllegalArgumentException e) {
         e.printStackTrace();
     } catch (IllegalAccessException e) {
         e.printStackTrace();
     } catch (InvocationTargetException e) {
         e.printStackTrace();
     }


  最终效果图,demo中为图片!

  附demo下载地址:点我下载


  参考资料:

   http://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html


   https://gist.github.com/devunwired/8cbe094bb7a783e37ad1


   http://www.trinea.cn/android/viewpager%E5%AE%9E%E7%8E%B0%E7%94%BB%E5%BB%8A%E4%B8%80%E5

%B1%8F%E5%A4%9A%E4%B8%AAfragment%E6%95%88%E6%9E%9C/


  原文链接:http://www.67tgb.com/?p=623

  转载注明:望月听涛

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值