android-整体UI设计-(滑动导航栏+滚动页面)
转自http://blog.****.net/swadair/article/details/7551609
很多朋友对RollNavigationBar+SlidePageView如何设计业务界面感到疑惑,今天我专门写了Demo共大家参考。效果图如下:
页面A
页面A滑向页面B中
页面B
做了个简单的动态效果图
实现源码如下:
- packagecn.w.song.ui;
- importjava.util.HashMap;
- importjava.util.LinkedList;
- importjava.util.List;
- importjava.util.Map;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.view.LayoutInflater;
- importandroid.view.MotionEvent;
- importandroid.view.View;
- importandroid.view.ViewGroup;
- importandroid.widget.ImageView;
- importandroid.widget.TextView;
- importcn.w.song.widget.navigation.RollNavigationBar;
- importcn.w.song.widget.navigation.adapter.RollNavigationBarAdapter;
- importcn.w.song.widget.scroll.SlidePageView;
- importcn.w.song.widget.scroll.SlidePageView.OnPageViewChangedListener;
- /**
- *注意确保将w.song.android.widget-1.0.4.jar导入项目
- *w.song.android.widget-1.0.4.jar下载地址http://download.****.net/detail/swadair/4289692
- *QQ2636852590
- *@authorw.song
- *@version1.0.1
- *@date2012-5-9
- */
- publicclassUIADemoActivityextendsActivity{
- privateStringtag="UIADemoActivity";
- privateString[]title={"关注","热门","分类","喜欢"};
- privateint[]photo={R.drawable.nav_menu_home,R.drawable.nav_menu_hot,
- R.drawable.nav_menu_category,R.drawable.nav_menu_like};
- privateint[]photoSelected={R.drawable.nav_menu_home_selected,
- R.drawable.nav_menu_hot_selected,
- R.drawable.nav_menu_category_active,
- R.drawable.nav_menu_like_active};
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.uiademo_ui);
- /*获取组件*/
- finalRollNavigationBarrnb=(RollNavigationBar)findViewById(R.id.uiademo_ui_RollNavigationBar);
- finalSlidePageViewspv=(SlidePageView)findViewById(R.id.uiademo_ui_SlidePageView);
- /*定制动态数据*/
- List<Map<String,Object>>list=newLinkedList<Map<String,Object>>();
- for(inti=0;i<title.length;i++){
- Map<String,Object>map=newHashMap<String,Object>();
- map.put("title",title[i]);
- map.put("photo",photo[i]);
- map.put("photoSelected",photoSelected[i]);
- list.add(map);
- }
- /*设置滑动条的滑动时间,时间范围在0.1~1s,不在范围则默认0.1s*/
- rnb.setSelecterMoveContinueTime(0.1f);//可以不设置,默认0.1s
- /*设置滑动条样式(图片)*/
- rnb.setSelecterDrawableSource(R.drawable.nav_menu_bg);//必须
- /*设置导航栏的被选位置*/
- rnb.setSelectedChildPosition(0);//可以不设置
- /*导航栏扩展*/
- finalMyNavigationBarAdapteradapter=newMyNavigationBarAdapter(this,
- list);
- rnb.setAdapter(adapter);//必须
- rnb.setNavigationBarListener(newRollNavigationBar.NavigationBarListener(){
- /**
- *position被选位置view为导航栏event移动事件
- */
- @Override
- publicvoidonNavigationBarClick(intposition,Viewview,
- MotionEventevent){
- switch(event.getAction()){
- caseMotionEvent.ACTION_DOWN://按下去时
- spv.setCurrPagePosition(position);
- spv.CurrPageScrollToScreenCenter();
- break;
- caseMotionEvent.ACTION_MOVE://移动中
- break;
- caseMotionEvent.ACTION_UP://抬手时
- break;
- }
- }
- });
- /*滚动页面(正文)监听*/
- spv.setOnPageViewChangedListener(newOnPageViewChangedListener(){
- @Override
- publicvoidOnPageViewChanged(intcurrPagePosition,
- ViewcurrPageView){
- rnb.setSelectedChildPosition(currPagePosition);
- rnb.refreshView(adapter);
- }
- });
- }
- /**
- *导航栏扩展
- *
- *@authorw.song
- *@version1.0.1
- *@date2012-4-22
- */
- classMyNavigationBarAdapterextendsRollNavigationBarAdapter{
- privateList<Map<String,Object>>list;
- privateLayoutInflatermInflater;
- publicMyNavigationBarAdapter(Activityactivity,
- List<Map<String,Object>>list){
- mInflater=LayoutInflater.from(activity);
- this.list=list;
- }
- @Override
- publicintgetCount(){
- returnlist.size();
- }
- /**
- *获取每个组件
- *
- *@paramposition
- *组件的位置
- *@paramcontextView
- *组件
- *@paramparent
- *上层组件
- */
- @Override
- publicViewgetView(intposition,ViewcontextView,ViewGroupparent){
- mInflater.inflate(R.layout.item,(ViewGroup)contextView);
- RollNavigationBarrollNavigationBar=(RollNavigationBar)parent;
- /*获取组件*/
- ImageViewimageView=(ImageView)contextView
- .findViewById(R.id.image_view);
- TextViewtitleView=(TextView)contextView
- .findViewById(R.id.title_view);
- /*获取参数*/
- Stringtitle=""+list.get(position).get("title");
- intphoto=(Integer)list.get(position).get("photo");
- intphotoSelected=(Integer)list.get(position).get(
- "photoSelected");
- /*组件设置参数*/
- //区分选择与被选择图片
- if(position==rollNavigationBar.getSelectedChildPosition()){//被选择
- imageView.setBackgroundResource(photoSelected);
- }else{//没被选择
- imageView.setBackgroundResource(photo);
- }
- titleView.setText(title);
- returncontextView;
- }
- }
- }
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