由於智能電視並不像手機那樣支援手勢劃屏,所以在電視上展示多屏資料時,需要提示使用者翻頁還有更多內容。
一般使用較多的方法就是箭頭提示,比如:
還有一種更好的做法就是將下一頁的部分展現出來,直觀提示使用者還有更多的頁面。這種展現方式結合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
轉載註明:望月聽濤