android-整体UI设计-(滑动导航栏+滚动页面)

转自http://blog.****.net/swadair/article/details/7551609

很多朋友对RollNavigationBar+SlidePageView如何设计业务界面感到疑惑,今天我专门写了Demo共大家参考。效果图如下:

android-整体UI设计-(滑动导航栏+滚动页面)页面Aandroid-整体UI设计-(滑动导航栏+滚动页面)页面A滑向页面B中android-整体UI设计-(滑动导航栏+滚动页面)页面Bandroid-整体UI设计-(滑动导航栏+滚动页面)做了个简单的动态效果图

实现源码如下:

  1. packagecn.w.song.ui;
  2. importjava.util.HashMap;
  3. importjava.util.LinkedList;
  4. importjava.util.List;
  5. importjava.util.Map;
  6. importandroid.app.Activity;
  7. importandroid.os.Bundle;
  8. importandroid.view.LayoutInflater;
  9. importandroid.view.MotionEvent;
  10. importandroid.view.View;
  11. importandroid.view.ViewGroup;
  12. importandroid.widget.ImageView;
  13. importandroid.widget.TextView;
  14. importcn.w.song.widget.navigation.RollNavigationBar;
  15. importcn.w.song.widget.navigation.adapter.RollNavigationBarAdapter;
  16. importcn.w.song.widget.scroll.SlidePageView;
  17. importcn.w.song.widget.scroll.SlidePageView.OnPageViewChangedListener;
  18. /**
  19. *注意确保将w.song.android.widget-1.0.4.jar导入项目
  20. *w.song.android.widget-1.0.4.jar下载地址http://download.****.net/detail/swadair/4289692
  21. *QQ2636852590
  22. *@authorw.song
  23. *@version1.0.1
  24. *@date2012-5-9
  25. */
  26. publicclassUIADemoActivityextendsActivity{
  27. privateStringtag="UIADemoActivity";
  28. privateString[]title={"关注","热门","分类","喜欢"};
  29. privateint[]photo={R.drawable.nav_menu_home,R.drawable.nav_menu_hot,
  30. R.drawable.nav_menu_category,R.drawable.nav_menu_like};
  31. privateint[]photoSelected={R.drawable.nav_menu_home_selected,
  32. R.drawable.nav_menu_hot_selected,
  33. R.drawable.nav_menu_category_active,
  34. R.drawable.nav_menu_like_active};
  35. @Override
  36. protectedvoidonCreate(BundlesavedInstanceState){
  37. super.onCreate(savedInstanceState);
  38. setContentView(R.layout.uiademo_ui);
  39. /*获取组件*/
  40. finalRollNavigationBarrnb=(RollNavigationBar)findViewById(R.id.uiademo_ui_RollNavigationBar);
  41. finalSlidePageViewspv=(SlidePageView)findViewById(R.id.uiademo_ui_SlidePageView);
  42. /*定制动态数据*/
  43. List<Map<String,Object>>list=newLinkedList<Map<String,Object>>();
  44. for(inti=0;i<title.length;i++){
  45. Map<String,Object>map=newHashMap<String,Object>();
  46. map.put("title",title[i]);
  47. map.put("photo",photo[i]);
  48. map.put("photoSelected",photoSelected[i]);
  49. list.add(map);
  50. }
  51. /*设置滑动条的滑动时间,时间范围在0.1~1s,不在范围则默认0.1s*/
  52. rnb.setSelecterMoveContinueTime(0.1f);//可以不设置,默认0.1s
  53. /*设置滑动条样式(图片)*/
  54. rnb.setSelecterDrawableSource(R.drawable.nav_menu_bg);//必须
  55. /*设置导航栏的被选位置*/
  56. rnb.setSelectedChildPosition(0);//可以不设置
  57. /*导航栏扩展*/
  58. finalMyNavigationBarAdapteradapter=newMyNavigationBarAdapter(this,
  59. list);
  60. rnb.setAdapter(adapter);//必须
  61. rnb.setNavigationBarListener(newRollNavigationBar.NavigationBarListener(){
  62. /**
  63. *position被选位置view为导航栏event移动事件
  64. */
  65. @Override
  66. publicvoidonNavigationBarClick(intposition,Viewview,
  67. MotionEventevent){
  68. switch(event.getAction()){
  69. caseMotionEvent.ACTION_DOWN://按下去时
  70. spv.setCurrPagePosition(position);
  71. spv.CurrPageScrollToScreenCenter();
  72. break;
  73. caseMotionEvent.ACTION_MOVE://移动中
  74. break;
  75. caseMotionEvent.ACTION_UP://抬手时
  76. break;
  77. }
  78. }
  79. });
  80. /*滚动页面(正文)监听*/
  81. spv.setOnPageViewChangedListener(newOnPageViewChangedListener(){
  82. @Override
  83. publicvoidOnPageViewChanged(intcurrPagePosition,
  84. ViewcurrPageView){
  85. rnb.setSelectedChildPosition(currPagePosition);
  86. rnb.refreshView(adapter);
  87. }
  88. });
  89. }
  90. /**
  91. *导航栏扩展
  92. *
  93. *@authorw.song
  94. *@version1.0.1
  95. *@date2012-4-22
  96. */
  97. classMyNavigationBarAdapterextendsRollNavigationBarAdapter{
  98. privateList<Map<String,Object>>list;
  99. privateLayoutInflatermInflater;
  100. publicMyNavigationBarAdapter(Activityactivity,
  101. List<Map<String,Object>>list){
  102. mInflater=LayoutInflater.from(activity);
  103. this.list=list;
  104. }
  105. @Override
  106. publicintgetCount(){
  107. returnlist.size();
  108. }
  109. /**
  110. *获取每个组件
  111. *
  112. *@paramposition
  113. *组件的位置
  114. *@paramcontextView
  115. *组件
  116. *@paramparent
  117. *上层组件
  118. */
  119. @Override
  120. publicViewgetView(intposition,ViewcontextView,ViewGroupparent){
  121. mInflater.inflate(R.layout.item,(ViewGroup)contextView);
  122. RollNavigationBarrollNavigationBar=(RollNavigationBar)parent;
  123. /*获取组件*/
  124. ImageViewimageView=(ImageView)contextView
  125. .findViewById(R.id.image_view);
  126. TextViewtitleView=(TextView)contextView
  127. .findViewById(R.id.title_view);
  128. /*获取参数*/
  129. Stringtitle=""+list.get(position).get("title");
  130. intphoto=(Integer)list.get(position).get("photo");
  131. intphotoSelected=(Integer)list.get(position).get(
  132. "photoSelected");
  133. /*组件设置参数*/
  134. //区分选择与被选择图片
  135. if(position==rollNavigationBar.getSelectedChildPosition()){//被选择
  136. imageView.setBackgroundResource(photoSelected);
  137. }else{//没被选择
  138. imageView.setBackgroundResource(photo);
  139. }
  140. titleView.setText(title);
  141. returncontextView;
  142. }
  143. }
  144. }


demo项目源码下载地址http://download.****.net/detail/swadair/4289766

注意demo项目务必导入w.song.android.widget-1.0.4.jar包

w.song.android.widget.jar有了1.0.4版本,该版本没有新增组件,但对现有组件做了良好的优化。

w.song.android.widget-1.0.4.jar下载地址http://download.****.net/detail/swadair/4289692