PopupWindow实现右侧、左侧和底部弹出菜单
来源:互联网 发布:java 多语言开发 编辑:程序博客网 时间:2024/03/29 21:36
先上图,4张:
项目代码:http://download.csdn.net/download/jianfengwen/9124745 (需要2个分)
项目SDK是5.1,建议将代码拷到自己的工程中去
代码如下:
MainActivity类:
package com.example.popupleftmenu;import android.app.Activity;import android.content.Context;import android.graphics.drawable.ColorDrawable;import android.os.Bundle;import android.view.Gravity;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.view.ViewGroup.LayoutParams;import android.view.WindowManager;import android.widget.Button;import android.widget.PopupWindow;import android.widget.Toast;public class MainActivity extends Activity {private Context context = null;private PopupWindow popupWindow;private int from = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);context = this;setContentView(R.layout.activity_main);Button popLeftBtn = (Button)findViewById(R.id.pop_left_btn);Button popRightBtn = (Button)findViewById(R.id.pop_right_btn);Button popBottomBtn = (Button)findViewById(R.id.pop_bottom_btn);popLeftBtn.setOnClickListener(popClick);popRightBtn.setOnClickListener(popClick);popBottomBtn.setOnClickListener(popClick);}OnClickListener popClick = new OnClickListener() {@Overridepublic void onClick(View v) {switch(v.getId()){case R.id.pop_left_btn:{from = Location.LEFT.ordinal();break;}case R.id.pop_right_btn:{from = Location.RIGHT.ordinal();break;}case R.id.pop_bottom_btn:{from = Location.BOTTOM.ordinal();break;}}//调用此方法,menu不会顶置//popupWindow.showAsDropDown(v);initPopupWindow();}};/** * 添加新笔记时弹出的popWin关闭的事件,主要是为了将背景透明度改回来 * */ class popupDismissListener implements PopupWindow.OnDismissListener{@Overridepublic void onDismiss() {backgroundAlpha(1f);}}protected void initPopupWindow(){View popupWindowView = getLayoutInflater().inflate(R.layout.pop, null);//内容,高度,宽度if(Location.BOTTOM.ordinal() == from){popupWindow = new PopupWindow(popupWindowView, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, true);}else{popupWindow = new PopupWindow(popupWindowView, LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT, true);}//动画效果if(Location.LEFT.ordinal() == from){popupWindow.setAnimationStyle(R.style.AnimationLeftFade);}else if(Location.RIGHT.ordinal() == from){popupWindow.setAnimationStyle(R.style.AnimationRightFade);}else if(Location.BOTTOM.ordinal() == from){popupWindow.setAnimationStyle(R.style.AnimationBottomFade);}//菜单背景色ColorDrawable dw = new ColorDrawable(0xffffffff);popupWindow.setBackgroundDrawable(dw);//宽度//popupWindow.setWidth(LayoutParams.WRAP_CONTENT); //高度//popupWindow.setHeight(LayoutParams.FILL_PARENT);//显示位置if(Location.LEFT.ordinal() == from){popupWindow.showAtLocation(getLayoutInflater().inflate(R.layout.activity_main, null), Gravity.LEFT, 0, 500);}else if(Location.RIGHT.ordinal() == from){popupWindow.showAtLocation(getLayoutInflater().inflate(R.layout.activity_main, null), Gravity.RIGHT, 0, 500);}else if(Location.BOTTOM.ordinal() == from){popupWindow.showAtLocation(getLayoutInflater().inflate(R.layout.activity_main, null), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);}//设置背景半透明backgroundAlpha(0.5f);//关闭事件popupWindow.setOnDismissListener(new popupDismissListener());popupWindowView.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {/*if( popupWindow!=null && popupWindow.isShowing()){popupWindow.dismiss();popupWindow=null;}*/// 这里如果返回true的话,touch事件将被拦截 // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismissreturn false;}});Button open = (Button)popupWindowView.findViewById(R.id.open);Button save = (Button)popupWindowView.findViewById(R.id.save);Button close = (Button)popupWindowView.findViewById(R.id.close);open.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(context, "Open", Toast.LENGTH_LONG).show();popupWindow.dismiss();}});save.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(context, "Open", Toast.LENGTH_LONG).show();popupWindow.dismiss();}});close.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(context, "Open", Toast.LENGTH_LONG).show();popupWindow.dismiss();}});}/** * 设置添加屏幕的背景透明度 * @param bgAlpha */public void backgroundAlpha(float bgAlpha){WindowManager.LayoutParams lp = getWindow().getAttributes();lp.alpha = bgAlpha; //0.0-1.0 getWindow().setAttributes(lp);}/** * 菜单弹出方向 * */public enum Location {LEFT,RIGHT,TOP,BOTTOM;}}
两个布局文件:
1.activity_main.xml,就三个Button
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <Button android:id="@+id/pop_left_btn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/pop_left"/> <Button android:id="@+id/pop_right_btn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/pop_right"/> <Button android:id="@+id/pop_bottom_btn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/pop_bottom"/> </LinearLayout>
2. pop.xml,也是三个Button,可以自己修改
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- <LinearLayout android:layout_width="wrap_content" android:layout_height="fill_parent" android:orientation="vertical" android:background="#ffffff"> --> <Button android:id="@+id/open" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/open"/> <Button android:id="@+id/save" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/save"/> <Button android:id="@+id/close" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/close"/> <!-- </LinearLayout> --> </LinearLayout>
strings.xml
<string name="pop_left">弹出左侧菜单</string><string name="pop_right">弹出右侧菜单</string><string name="pop_bottom">弹出底部菜单</string><string name="open">打开</string> <string name="save">保存</string> <string name="close">关闭</string>
styles.xml
<style name="AnimationLeftFade"> <item name="android:windowEnterAnimation">@anim/in_lefttoright</item> <item name="android:windowExitAnimation">@anim/out_righttoleft</item> </style> <style name="AnimationRightFade"> <item name="android:windowEnterAnimation">@anim/in_righttoleft</item> <item name="android:windowExitAnimation">@anim/out_lefttoright</item> </style> <style name="AnimationBottomFade"> <item name="android:windowEnterAnimation">@anim/in_bottomtotop</item> <item name="android:windowExitAnimation">@anim/out_toptobottom</item> </style>
左边弹出菜单动画文件:
in_lefttoright.xml:从左边入
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="-100%" android:toXDelta="0" android:duration="500"/> </set>
out_righttoleft.xml:从右边出
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="-100%" android:duration="500"/></set>
其他动画文件自己参考写,就是fromXDelta, fromYDelta, toXDelta和toYDelta使用
3 0
- PopupWindow实现右侧、左侧和底部弹出菜单
- PopupWindow实现右侧、左侧和底部弹出菜单
- PopupWindow实现右侧、左侧和底部弹出菜单
- PopupWindow实现右侧、左侧和底部弹出菜单
- 左侧菜单,点击右侧弹出内容
- popupwindow仿侧滑菜单底部弹出
- PopupWindow 实现仿微信底部弹出的分享菜单
- PopupWindow 实现显示仿腾讯新闻底部弹出菜单
- PopupWindow实现屏幕底部弹出
- 实现底部弹出菜单
- android PopupWindow底部弹出gridview菜单
- 点击左侧菜单在右侧弹出相应的内容
- .底部菜单栏:PopupWindow 实现显示仿腾讯新闻底部弹出菜单
- android popwindow实现左侧弹出菜单层及PopupWindow主要方法介绍
- DialogFragment实现右侧、中间、底部菜单
- PopupWindow实现弹出菜单效果
- android PopupWindow实现从底部弹出或滑出选择菜单或窗口
- android PopupWindow实现从底部弹出或滑出选择菜单或窗口
- C++基础
- 图文:eclipse中SVN分支合并到主干
- 猴子吃桃子
- Android开发总结笔记 RelativeLayout(相对布局) 1-1-2
- 点击EDITTEXT之外 隐藏输入法的实现
- PopupWindow实现右侧、左侧和底部弹出菜单
- android学习之路(五)----stetho显示不出调试信息
- requestWindowFeature()的应用
- 数据结构【线性表(二)链表】项目一--建立单链表
- 判断Android手机是否开启USB调试
- LINUX文件锁定
- Oracle Jdbc 防sql注入
- Java通过位运算实现10-16进制转换
- iOS开发笔记-json转字典