由于智能电视并不像手机那样支持手势划屏,所以在电视上展示多屏数据时,需要提示用户翻页还有更多内容。
一般使用较多的方法就是箭头提示,比如:
还有一种更好的做法就是将下一页的部分展现出来,直观提示用户还有更多的页面。这种展现方式结合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
转载注明:望月听涛