android paopao窗口+gridview 的实现底部菜单
2015-08-16 18:21
363 查看
PopupWindow是一个可以显示在当前Activity之上的浮动容器,PopupWindow弹出的位置是能够改变的,按照有无偏移量,可以分为无偏移和有便宜两种;按照参照对象的不同又可以分为两种:相对某个控件(Anchor锚点)的位置和在父容器内部的相对位置。
我写的是泡泡窗口和grideview 结合的底部菜单效果,你也可以和listview结合从左侧或者右侧出现实现侧滑导航效果等。也可以直接布局写button 泡泡窗口我理解的就是一个view 容器,对于手机屏幕小做的扩展手机屏幕空间一种手段。
效果图
不多说了案例代码我已上传资源页 。
[泡泡窗口+gridview Demo] (http://download.csdn.net/detail/u012373815/9012299)
代码:
activity_main.xml 中的代码 (注意布局id 和button id)
这个是结合gridview 的grideview 的items 布局 控制泡泡窗口的每个小按钮的布局
这个是paopao窗口的xml 文件 是一个view 里面写了GridView
这个是paopao窗口出现和消失的动画效果 (这一部分是为了美观)
在value文件夹下 新建 xml命名为style.xml
在res文件夹下新建anim 文件夹 并新建两个写动画效果的xml
进入动画 enter.xml
退出动画 out.xml
我写的是泡泡窗口和grideview 结合的底部菜单效果,你也可以和listview结合从左侧或者右侧出现实现侧滑导航效果等。也可以直接布局写button 泡泡窗口我理解的就是一个view 容器,对于手机屏幕小做的扩展手机屏幕空间一种手段。
效果图
不多说了案例代码我已上传资源页 。
[泡泡窗口+gridview Demo] (http://download.csdn.net/detail/u012373815/9012299)
代码:
public class MainActivity extends Activity { private PopupWindow popupWindow; private View parent; private int[] images={R.drawable.icon25,R.drawable.icon25,R.drawable.icon25,R.drawable.icon25, R.drawable.icon25,R.drawable.icon25,R.drawable.icon25}; private String[] names={"1","2","3","4","5","6","7"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); View contentView= getLayoutInflater().inflate(R.layout.popwindow, null);//定义泡泡视图 GridView gridView= (GridView)contentView.findViewById(R.id.gridView1);//泡泡窗口的布局 gridView.setAdapter(getAdapter()); gridView.setOnItemClickListener(new ItemClickListener1()); popupWindow=new PopupWindow(contentView, ViewGroup.LayoutParams.MATCH_PARENT,//width ViewGroup.LayoutParams.WRAP_CONTENT);//higth popupWindow.setFocusable(true); popupWindow.setBackgroundDrawable(new BitmapDrawable()); popupWindow.setAnimationStyle(R.style.animation); parent=this.findViewById(R.id.main_activity); } private final class ItemClickListener1 implements OnItemClickListener{ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TextView tixt=(TextView)findViewById(R.id.text); if(popupWindow.isShowing()) { switch (position) { case 0: tixt.setText("您点击了0");break; case 1: String str0="您点击了1";tixt.setText(str0);break; case 2: String str1="您点击了2";tixt.setText(str1);break; case 3: String str2="您点击了3";tixt.setText(str2);break; case 4: String str3="您点击了4";tixt.setText(str3);break; case 5: String str4="您点击了5";tixt.setText(str4);break; case 6: String str5="您点击了6";tixt.setText(str5);break; case 7: String str6="您点击了7";tixt.setText(str6);break; } popupWindow.dismiss(); //消失 } // popupWindow end } } private ListAdapter getAdapter() { List<HashMap<String, Object>>data=new ArrayList<HashMap<String,Object>>(); for(int i=0; i<images.length;i++) { HashMap<String, Object> item=new HashMap<String, Object>(); item.put("image", images[0]); item.put("name", names[i]); data.add(item); } SimpleAdapter simpleAdapter=new SimpleAdapter(this, data, R.layout.grid_item, new String[]{"image","name"}, new int []{R.id.imageViewpopo,R.id.textViewpopo}); return simpleAdapter; } public void paopaowindow(View v)//点击泡泡窗口出现 { popupWindow.showAtLocation(parent, Gravity.BOTTOM, 0, 0); //确定在界面中出现的位置 } }
activity_main.xml 中的代码 (注意布局id 和button id)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:id="@+id/main_activity" tools:context="com.example.paopaowindow.MainActivity" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="paopaowindow" android:layout_marginTop="40dp" android:onClick="paopaowindow"/> </RelativeLayout>
这个是结合gridview 的grideview 的items 布局 控制泡泡窗口的每个小按钮的布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <ImageView android:id="@+id/imageViewpopo" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/textViewpopo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:textSize="16dp" android:textColor="#000099" android:text="TextView" /> </LinearLayout>
这个是paopao窗口的xml 文件 是一个view 里面写了GridView
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#a0a0a0" > <GridView android:id="@+id/gridView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numColumns="4" android:horizontalSpacing="10dp" android:verticalSpacing="10dp" android:text="我是泡泡窗口" /> </LinearLayout>
这个是paopao窗口出现和消失的动画效果 (这一部分是为了美观)
在value文件夹下 新建 xml命名为style.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="animation"> <item name="android:windowEnterAnimation">@anim/enter</item> <item name="android:windowExitAnimation">@anim/out</item> <!-- 窗口 进出的动画--> </style> </resources>
在res文件夹下新建anim 文件夹 并新建两个写动画效果的xml
进入动画 enter.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="500" /><!-- Y轴平移 --> <alpha android:fromAlpha="0.7" android:toAlpha="1.0" android:duration="500" /><!-- 透明度从0.5到1 --> </set>
退出动画 out.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="1000" /><!-- Y轴平移 --> <alpha android:fromAlpha="1.0" android:toAlpha="0.5" android:duration="1000" /><!-- 透明度从0.5到1 --> </set>
相关文章推荐
- Android性能优化典范 集
- 【Android高级】Android系统以及Activity启动讲解
- Android系统设置大号字体后布局错乱的问题
- android开发之Menu的使用
- Android获得当前系统时间、星期几、周几
- Android中的测试
- Android中自定义Toast
- AndroidFrameWork
- 【Android高级】Dalvik虚拟机及其类加载器讲解
- android图片选择由于版本导致的oom解决办法
- android初学者的探索之路(Android音乐播放器二)
- Android ADB工具-进行文件操作(三)
- Android LayoutInflater原理分析,带你一步步深入了解View(一)
- Android实现带动画的下拉刷新RecyclerView
- android中一个应用程序启动另外一个应用程序,并传递数据。
- Android Studio 初次使用
- Android 控件沿贝塞尔曲线运动(上)
- Android知识点清单(不断更新)
- Android自定义照相机实现(拍照、保存到SD卡,利用Bundle在Acitivity交换数据)
- 断其一指------异步任务(AsyncTask)