黑马程序员技术交流社区

标题: 导航菜单横向左右滑动并和下方的控件实现联动源码 [打印本页]

作者: 广驰    时间: 2013-5-23 11:34
标题: 导航菜单横向左右滑动并和下方的控件实现联动源码
本帖最后由 广驰 于 2013-5-23 11:36 编辑

实现原理是上方使用HorizontalScrollView这个可以水平横向拖动的控件,在其中加入了5个RadioButton;下方使用的是ViewPager,里面加入了7个Layout文件,其中第一个和最后一个为空,是为了实现拖到第一个屏幕的时候还能往外拖动的效果







作者: 绿影    时间: 2013-5-23 11:36
这个样子!
作者: 广驰    时间: 2013-5-23 11:37
本帖最后由 广驰 于 2013-5-23 11:38 编辑
  1. package com.zj.popupwindow;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import android.app.Activity;
  6. import android.graphics.drawable.BitmapDrawable;
  7. import android.os.Bundle;
  8. import android.util.Log;
  9. import android.view.Gravity;
  10. import android.view.View;
  11. import android.view.ViewGroup;
  12. import android.view.View.OnClickListener;
  13. import android.view.ViewGroup.LayoutParams;
  14. import android.widget.AdapterView;
  15. import android.widget.AdapterView.OnItemClickListener;
  16. import android.widget.ImageView;
  17. import android.widget.LinearLayout;
  18. import android.widget.ListView;
  19. import android.widget.PopupWindow;
  20. import android.widget.PopupWindow.OnDismissListener;
  21. import android.widget.SimpleAdapter;
  22. import android.widget.TextView;
  23. import android.widget.Toast;
  24. public class MainActivity extends Activity {
  25. private boolean mIsopen = false; //是否已经打开
  26. private ImageView mImageView; //三角形图标
  27. private LinearLayout mLinearLayout;
  28. private PopupWindow mPopupWindow;
  29. private ArrayList<HashMap<String, Object>> mArrayList;
  30. @Override
  31. public void onCreate(Bundle savedInstanceState) {
  32. super.onCreate(savedInstanceState);
  33. setContentView(R.layout.main);
  34. mLinearLayout = (LinearLayout)findViewById(R.id.pop_parent);
  35. mImageView = (ImageView)findViewById(R.id.imageView1);
  36. mLinearLayout.setOnClickListener(new OnClickListener() {
  37. @Override
  38. public void onClick(View v) {
  39. mIsopen = !mIsopen;
  40. if (mIsopen) {
  41. mImageView.setBackgroundResource(R.drawable.icon_arrow_down);
  42. }else {
  43. mImageView.setBackgroundResource(R.drawable.icon_arrow_up);
  44. }
  45. //设置popupwindow中的listView
  46. mArrayList = createData();
  47. View _View = getLayoutInflater().inflate(R.layout.popupwindow, null);
  48. ListView _ListView = (ListView) _View.findViewById(R.id.list);
  49. SimpleAdapter _SimpleAdapter = new SimpleAdapter(
  50. MainActivity.this, mArrayList,
  51. R.layout.listview_item, new String[]{"zj"},
  52. new int[]{R.id.list_item_txt}
  53. );
  54. _ListView.setAdapter(_SimpleAdapter);
  55. _ListView.setOnItemClickListener(new MyListOnItemClick());
  56. /*
  57. * 这个去掉了也没什么影响,先留下
  58. * 通过ListView的setItemsCanFocus(true)方法并不可以使ItemView
  59. * 在touch mode下可以获取焦点,他只是表明在由ListAdapter创建的视图中
  60. * ,可包含能获得焦点的项目.
  61. */
  62. _ListView.setItemsCanFocus(false);
  63. //设置PopupWindow
  64. mPopupWindow = new PopupWindow(
  65. _View,
  66. 160,
  67. 220
  68. );
  69. //注意下面所做的4条是为了使 点击popuWindow 以外的区域能够关闭它。
  70. // 使其聚焦
  71. mPopupWindow.setFocusable(true);
  72. // 设置允许在外点击消失
  73. mPopupWindow.setOutsideTouchable(true);
  74. //刷新状态
  75. mPopupWindow.update();
  76. //点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener
  77. mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
  78. mPopupWindow.showAsDropDown(findViewById(R.id.pop_parent), -50, 0);
  79. //mPopupWindow.showAtLocation(findViewById(R.id.pop_parent), Gravity.CENTER_HORIZONTAL | Gravity.TOP, 0, (int)getResources().getDimension(R.dimen.pop_y));
  80. mPopupWindow.setOnDismissListener(new OnDismissListener() {
  81. @Override
  82. public void onDismiss() {
  83. mIsopen = ! mIsopen;
  84. if (mIsopen) {
  85. mImageView.setBackgroundResource(R.drawable.icon_arrow_down);
  86. }else {
  87. mImageView.setBackgroundResource(R.drawable.icon_arrow_up);
  88. }
  89. Log.i("zj", "onDismiss");
  90. }
  91. });
  92. }
  93. });
  94. }
  95. private ArrayList<HashMap<String, Object>> createData(){
  96. HashMap<String, Object> map1 = new HashMap<String, Object>();
  97. map1.put("zj", "美食");
  98. HashMap<String, Object> map2 = new HashMap<String, Object>();
  99. map2.put("zj", "娱乐");
  100. HashMap<String, Object> map3 = new HashMap<String, Object>();
  101. map3.put("zj", "购物");
  102. HashMap<String, Object> map4 = new HashMap<String, Object>();
  103. map4.put("zj", "电影");
  104. ArrayList<HashMap<String, Object>> _ArrayList = new ArrayList<HashMap<String,Object>>();
  105. _ArrayList.add(map1);
  106. _ArrayList.add(map2);
  107. _ArrayList.add(map3);
  108. _ArrayList.add(map4);
  109. return _ArrayList;
  110. }
  111. class MyListOnItemClick implements OnItemClickListener{
  112. @Override
  113. public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
  114. long arg3) {
  115. // TODO Auto-generated method stub
  116. HashMap<String, Object> temp = mArrayList.get(arg2);
  117. mPopupWindow.dismiss();
  118. Toast.makeText(MainActivity.this, temp.get("zj").toString(), 1).show();
  119. }
  120. }
复制代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <HorizontalScrollView
  8. android:layout_width="match_parent"
  9. android:layout_height="50dp"
  10. android:fadingEdge="@null"
  11. android:scrollbars="none"
  12. android:background="#555555"
  13. android:id="@+id/horizontalScrollView"
  14. >
  15. <RelativeLayout
  16. android:layout_width="match_parent"
  17. android:layout_height="match_parent"
  18. android:background="#33b5e5"
  19. >
  20. <RadioGroup
  21. android:id="@+id/radioGroup"
  22. android:layout_width="fill_parent"
  23. android:layout_height="49dp"
  24. android:orientation="horizontal"
  25. android:layout_alignParentTop="true"
  26. >
  27. <RadioButton
  28. style="@style/radioButton"
  29. android:text="one"
  30. android:id="@+id/btn1"
  31. />
  32. <RadioButton
  33. style="@style/radioButton"
  34. android:text="two"
  35. android:id="@+id/btn2"
  36. />
  37. <RadioButton
  38. style="@style/radioButton"
  39. android:text="three"
  40. android:id="@+id/btn3"
  41. />
  42. <RadioButton
  43. style="@style/radioButton"
  44. android:text="four"
  45. android:id="@+id/btn4"
  46. />
  47. <RadioButton
  48. style="@style/radioButton"
  49. android:text="five"
  50. android:id="@+id/btn5"
  51. />
  52. </RadioGroup>
  53. <ImageView
  54. android:id="@+id/img1"
  55. android:layout_width="100dp"
  56. android:layout_height="4dp"
  57. android:background="#33b5e5"
  58. android:layout_alignParentBottom="true"
  59. />
  60. </RelativeLayout>
  61. </HorizontalScrollView>
  62. <android.support.v4.view.ViewPager
  63. android:id="@+id/pager"
  64. android:layout_width="fill_parent"
  65. android:layout_height="fill_parent"
  66. />
  67. </LinearLayout>
复制代码

作者: 王宝康    时间: 2013-5-23 12:31
:handshake
作者: 凊係柈泩    时间: 2013-5-23 15:24
收藏了很有用
作者: 杨彪    时间: 2013-5-23 16:15
学习一下啊
作者: 03jinquan23    时间: 2013-5-23 16:20
thank you @@
作者: 陈汉维    时间: 2013-5-23 21:54
看看看看看
作者: myclover    时间: 2013-5-23 23:02
挺不错的啊
作者: 周志强    时间: 2013-5-24 23:40
学习了
加油
作者: 一身顺利    时间: 2013-5-24 23:56
好东东。
作者: vipzh    时间: 2013-5-26 21:18
支持一下。。。。
作者: 风吹我走路    时间: 2013-5-28 00:56
这个很好用
作者: 乐峰    时间: 2013-5-28 21:43
偶吧。。加油哦
作者: Bcisk    时间: 2013-5-28 22:10
dddddddddddddddddddddddddddddddddd
作者: geozhang    时间: 2013-6-8 16:25
很好。学习。多谢楼主!
作者: geozhang    时间: 2013-6-8 16:25
很好。学习。多谢楼主!
作者: 403016605    时间: 2013-6-22 17:04
顶楼主,学习 了
作者: 丘凤光    时间: 2013-7-8 21:38
要是能再美化美化就更好了
作者: 李玉生    时间: 2013-7-28 20:27
这个东东从哪来的,我好像看到过
作者: 张东贤    时间: 2013-7-30 03:21
嗯.很明显这个东西的出处在哪了..3q
作者: 星月苍穹    时间: 2013-7-30 09:24
下载学习,谢谢啊
作者: 王亚男    时间: 2013-7-30 10:46
这个一定得学习下!
作者: jonn    时间: 2013-9-6 01:49
。。。。。。。

作者: 夏晓彤    时间: 2013-9-22 20:33
顶一下

作者: suiyuan_lin    时间: 2013-9-23 22:46
好东西,赞一个
作者: suiyuan_lin    时间: 2013-9-23 22:46
不错,赞一个
作者: 姝然    时间: 2013-9-25 22:23
ddddddddddddddddddddddddddd

作者: ssd不会    时间: 2013-9-27 15:54
很好啊,哈哈
作者: 山楂    时间: 2013-10-3 01:52
这个么好东西,谢谢分享

作者: whj11    时间: 2013-11-11 23:15
瞧瞧              
作者: librazeng    时间: 2013-11-17 10:22
这个实现起来不麻烦吧
作者: Zhen_霖    时间: 2013-11-17 22:39
我就看看
作者: gis_zhouda    时间: 2013-11-27 14:19
看看 学习下
作者: kangqbing    时间: 2013-12-2 19:53
导航菜单横向左右滑动并和下方的控件实现联动源码
作者: 慢灵魂    时间: 2013-12-2 21:13
谢谢分享了
作者: 编织者    时间: 2013-12-5 20:16
的顶顶顶顶顶
作者: huangtk    时间: 2013-12-13 16:43
非常好,谢谢分享!

作者: amtest1111    时间: 2014-7-2 21:55
:)                                            
作者: 大山    时间: 2015-2-26 16:46
好东西就要学习下
作者: 大山    时间: 2015-2-26 16:48
好东西就要学习下
作者: 致青春    时间: 2015-8-20 19:03
谢谢分享
作者: Alone_G4ykq    时间: 2015-11-5 19:56
dsgreffef4rt
作者: 天人之珠    时间: 2015-11-6 15:41
收藏了很有用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2