Android UI开发篇之 ViewPager+九宫格布局 实现左右滑动

分类:Android 2542人阅读 评论(4) 收藏 举报 android UI ViewPager 九宫布局

首先看下UI效果:

Android UI开发篇之 ViewPager+九宫格布局 实现左右滑动_第1张图片

这个是我在业余开发的新浪微博广场模块的一个实现页面左右滑动的效果,用到的有android.support.v4.view.ViewPager 实现页面切换+GridView 的九宫格布局。

下面直接贴代码:

1、/WeiBo_ice/res/layout/search_title.xml < 广场标题布局>

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/search_title_layout"
  4. android:layout_width="match_parent"
  5. android:layout_height="wrap_content"
  6. android:background="@drawable/titlebar_bg">
  7. <TextViewandroid:id="@+id/tv_search_name"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:layout_gravity="center|center_horizontal"
  11. android:text="@string/tabbar_square"
  12. android:textSize="@dimen/title_text_size"
  13. android:textColor="@color/title_text_color"/>
  14. <FrameLayoutandroid:layout_width="wrap_content"
  15. android:layout_height="wrap_content"
  16. android:layout_gravity="right|center_vertical">
  17. <ProgressBarandroid:id="@+id/titleprogressBar"
  18. style="@android:attr/progressBarStyleLarge"
  19. android:layout_width="30dip"
  20. android:layout_height="30dip"
  21. android:visibility="gone"/>
  22. <ImageViewandroid:id="@+id/title_bt_right"
  23. android:layout_width="wrap_content"
  24. android:layout_height="wrap_content"
  25. android:contentDescription="@string/empty"/>
  26. </FrameLayout>
  27. </FrameLayout>

2、/WeiBo_ice/res/layout/searchinfo.xml

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/search_title_layout"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. android:orientation="vertical">
  7. <includeandroid:id="@+id/title"
  8. layout="@layout/search_title"
  9. />
  10. <FrameLayoutandroid:layout_width="fill_parent"
  11. android:layout_height="fill_parent"
  12. android:orientation="vertical">
  13. <!--使用ViewPager-->
  14. <android.support.v4.view.ViewPager
  15. android:id="@+id/search_viewpager"
  16. android:layout_width="fill_parent"
  17. android:layout_height="wrap_content"
  18. android:layout_gravity="center">
  19. </android.support.v4.view.ViewPager>
  20. <RelativeLayoutandroid:layout_width="fill_parent"
  21. android:layout_height="wrap_content"
  22. >
  23. <LinearLayout
  24. android:id="@+id/llguid"
  25. android:layout_width="fill_parent"
  26. android:layout_height="wrap_content"
  27. android:gravity="center"
  28. android:layout_alignParentBottom="true"
  29. android:orientation="horizontal">
  30. <ImageView
  31. android:layout_width="wrap_content"
  32. android:layout_height="wrap_content"
  33. android:src="@drawable/guide_round"
  34. android:clickable="true"
  35. android:layout_margin="8dp"
  36. android:contentDescription="@string/empty"
  37. />
  38. <ImageView
  39. android:layout_width="wrap_content"
  40. android:layout_height="wrap_content"
  41. android:src="@drawable/guide_round"
  42. android:clickable="true"
  43. android:layout_margin="8dp"
  44. android:contentDescription="@string/empty"
  45. />
  46. <ImageView
  47. android:layout_width="wrap_content"
  48. android:layout_height="wrap_content"
  49. android:src="@drawable/guide_round"
  50. android:clickable="true"
  51. android:layout_margin="8dp"
  52. android:contentDescription="@string/empty"
  53. />
  54. </LinearLayout>
  55. </RelativeLayout>
  56. </FrameLayout>
  57. </LinearLayout>

3、/WeiBo_ice/res/layout/ninebox.xml <九宫格布局文件>,共有三个页面切换、所有三个layout 九宫格布局文件<ninebox_2.xml,ninebox_3.xml>、内容相似,这里就只贴出一个。

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical">
  6. <GridView
  7. android:id="@+id/myGridView"
  8. android:layout_width="fill_parent"
  9. android:layout_height="fill_parent"
  10. android:numColumns="3"
  11. android:verticalSpacing="15dip"
  12. android:horizontalSpacing="6dip"
  13. android:stretchMode="columnWidth"
  14. android:layout_marginTop="20dp"
  15. android:gravity="center">
  16. </GridView>
  17. </LinearLayout>

4、/WeiBo_ice/res/layout/ninebox_item.xml 九宫格内 每一个格的布局< 包含 图片 和 文字显示>

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical">
  6. <ImageViewandroid:id="@+id/ItemImageView"
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:contentDescription="@string/empty"
  10. android:layout_gravity="center"/>
  11. <TextViewandroid:id="@+id/itemTextView"
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:textIsSelectable="false"
  15. android:layout_gravity="center"
  16. android:gravity="center"/>
  17. </LinearLayout>

5、/WeiBo_ice/src/com/ice/weibo/activity/DiscoveActivity.java

[java] view plain copy
  1. packagecom.ice.weibo.activity;
  2. importjava.util.ArrayList;
  3. importjava.util.HashMap;
  4. importjava.util.List;
  5. importandroid.app.Activity;
  6. importandroid.os.Bundle;
  7. importandroid.support.v4.view.PagerAdapter;
  8. importandroid.support.v4.view.ViewPager;
  9. importandroid.support.v4.view.ViewPager.OnPageChangeListener;
  10. importandroid.util.Log;
  11. importandroid.view.LayoutInflater;
  12. importandroid.view.View;
  13. importandroid.view.ViewGroup;
  14. importandroid.widget.GridView;
  15. importandroid.widget.ImageView;
  16. importandroid.widget.LinearLayout;
  17. importandroid.widget.SimpleAdapter;
  18. importcom.ice.weibo.R;
  19. importcom.ice.weibo.util.ConstantS;
  20. /**
  21. *广场UI
  22. *@authorice
  23. *
  24. */
  25. publicclassDiscoveActivityextendsActivity{
  26. privateViewPagermViewPager;
  27. privateLinearLayoutll_1,ll_2,ll_3;
  28. privateGridViewview1,view2,view3;
  29. privateList<View>viewList;//把需要滑动的页卡添加到这个list中
  30. privateImageView[]imageViews;
  31. privateintcurrentPosition=0;//当前位置
  32. /*
  33. *这里我就偷懒啦、三个切换滑动页面引用的是相同的图标和文字、我就省了去找其他的图片啦
  34. *我们可以定义三组数组分别放每个界面的图标和文字内容、
  35. *然后修改下下面的setGridViewAdapter()方法就行啦...
  36. *
  37. */
  38. //定义图标数组
  39. privateint[]imageRes={R.drawable.nine_1,R.drawable.nine_2,R.drawable.nine_3,
  40. R.drawable.nine_4,R.drawable.nine_5,R.drawable.nine_6,
  41. R.drawable.nine_7,R.drawable.nine_8,R.drawable.nine_9};
  42. //定义标题数组
  43. privateString[]itemName={"微信","微音乐","微魅儿",
  44. "微通讯","微短信","微烦皂",
  45. "微盟主","微爱心","微互粉"
  46. };
  47. @Override
  48. protectedvoidonCreate(BundlesavedInstanceState){
  49. super.onCreate(savedInstanceState);
  50. setContentView(R.layout.searchinfo);
  51. initViews();
  52. Log.d(ConstantS.TAG,"currentPosition:"+currentPosition++);
  53. }
  54. publicvoidinitViews(){
  55. mViewPager=(ViewPager)findViewById(R.id.search_viewpager);
  56. LayoutInflaterlf=getLayoutInflater().from(this);
  57. ll_1=(LinearLayout)lf.inflate(R.layout.ninebox,null);
  58. view1=(GridView)ll_1.findViewById(R.id.myGridView);
  59. ll_2=(LinearLayout)lf.inflate(R.layout.ninebox_2,null);
  60. view2=(GridView)ll_2.findViewById(R.id.myGridView2);
  61. ll_3=(LinearLayout)lf.inflate(R.layout.ninebox_3,null);
  62. view3=(GridView)ll_3.findViewById(R.id.myGridView3);
  63. viewList=newArrayList<View>();//将要分页显示的View装入数组中
  64. viewList.add(ll_1);
  65. viewList.add(ll_2);
  66. viewList.add(ll_3);
  67. setGridViewAdapter(view1);
  68. setGridViewAdapter(view2);
  69. setGridViewAdapter(view3);
  70. mViewPager.setAdapter(newMyPagerAdapter(viewList));
  71. mViewPager.setOnPageChangeListener(newmyOnPageChangeListener());
  72. LinearLayoutllguid=(LinearLayout)findViewById(R.id.llguid);
  73. imageViews=newImageView[viewList.size()];
  74. for(inti=0;i<viewList.size();i++){
  75. imageViews[i]=(ImageView)llguid.getChildAt(i);
  76. imageViews[i].setEnabled(true);
  77. imageViews[i].setTag(i);
  78. }
  79. imageViews[currentPosition].setEnabled(false);
  80. }
  81. /**
  82. *设置GridView适配器
  83. */
  84. privatevoidsetGridViewAdapter(GridViewmGridView){
  85. List<HashMap<String,Object>>data=newArrayList<HashMap<String,Object>>();
  86. intlength=itemName.length;
  87. for(inti=0;i<length;i++){
  88. HashMap<String,Object>map=newHashMap<String,Object>();
  89. map.put("ItemImageView",imageRes[i]);
  90. map.put("ItemTextView",itemName[i]);
  91. data.add(map);
  92. }
  93. SimpleAdaptersimpleAdapter=newSimpleAdapter(this,
  94. data,
  95. R.layout.ninebox_item,
  96. newString[]{"ItemImageView","ItemTextView"},
  97. newint[]{R.id.ItemImageView,R.id.itemTextView});
  98. mGridView.setAdapter(simpleAdapter);
  99. }
  100. classMyPagerAdapterextendsPagerAdapter{
  101. List<View>viewList;
  102. publicMyPagerAdapter(List<View>viewList){
  103. this.viewList=viewList;
  104. }
  105. @Override
  106. publicintgetCount(){
  107. //TODOAuto-generatedmethodstub
  108. returnviewList.size();
  109. }
  110. @Override
  111. publicbooleanisViewFromObject(Viewarg0,Objectarg1){
  112. //TODOAuto-generatedmethodstub
  113. returnarg0==arg1;
  114. }
  115. @Override
  116. publicvoiddestroyItem(Viewcontainer,intposition,Objectobject){
  117. //TODOAuto-generatedmethodstub
  118. ((ViewPager)container).removeView(viewList.get(position));
  119. }
  120. @Override
  121. publicObjectinstantiateItem(ViewGroupcontainer,intposition){
  122. //TODOAuto-generatedmethodstub
  123. container.addView(viewList.get(position));
  124. //Log.d(ConstantS.TAG,"ViewPager--Position:"+position);
  125. returnviewList.get(position);
  126. }
  127. }
  128. classmyOnPageChangeListenerimplementsOnPageChangeListener{
  129. /**
  130. *当滑动状态改变时调用
  131. */
  132. @Override
  133. publicvoidonPageScrollStateChanged(intarg0){
  134. //TODOAuto-generatedmethodstub
  135. }
  136. /**
  137. *当当前页面被滑动时调用
  138. */
  139. @Override
  140. publicvoidonPageScrolled(intarg0,floatarg1,intarg2){
  141. //TODOAuto-generatedmethodstub
  142. }
  143. /**
  144. *当新的页面被选中时调用
  145. */
  146. @Override
  147. publicvoidonPageSelected(intarg0){
  148. Log.d(ConstantS.TAG,"ViewPager--当前是第几页:"+arg0);
  149. for(inti=0;i<imageViews.length;i++){
  150. if(i==arg0){
  151. imageViews[arg0].setEnabled(true);
  152. }else{
  153. imageViews[i].setEnabled(false);
  154. }
  155. }
  156. }
  157. }
  158. }

6、/WeiBo_ice/res/drawable-mdpi/guide_round.xml 这个是控制界面切换时下面三个向导的小圆图标的显示效果。< 在searchinfo.xml 中有被引用>

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <selectorxmlns:android="http://schemas.android.com/apk/res/android">
  3. <itemandroid:state_enabled="true"android:drawable="@drawable/guide_round_current"></item>
  4. <itemandroid:state_enabled="false"android:drawable="@drawable/guide_round_default"></item>
  5. </selector>

更多相关文章

  1. Android小例子(点击一个按钮,传递数据给另一个页面)
  2. Android 布局方式学习
  3. Android让页面默认弹出输入法的问题
  4. android线性布局布局的layout_weight
  5. Android顶部菜单栏,返回按钮、标题布局、右上角菜单
  6. 快速使用Android BaseRecyclerViewAdapterHelper之实现一种&多种
  7. 关于含有RecyclerView的布局载入时,会滚动到底部问题

随机推荐

  1. Android端的极光配置
  2. 移动互联网盈利知识
  3. Android简单图片浏览器
  4. Android接收程序安装、替换、卸载广播
  5. android下获取无线wif信号、ssid、MAC等
  6. android简单的日期时间选择器
  7. Android(安卓)2.3 不支持印度文
  8. android wifi框架
  9. Android get property的一种方法
  10. android访问php webservice简单一例