用view实现popwindow效果,弹出菜单.
来源:互联网 发布:原田知世 结婚了吗 编辑:程序博客网 时间:2024/05/10 12:18
之前是用popwindow做弹出菜单,发现他只能在最顶层。当加入上滑效果的时候,我们想要的是,从底部的某一个控件底部滑出来,
但是popwindow只能从他上面滑动出来。非常的难看。达不到效果。
因此。用view实现了popwindows。
代码还有待优化。有更好的实现方法请联系我。
/**<span style="white-space:pre"></span> * <span style="white-space:pre"></span> * @param activity <span style="white-space:pre"></span> * @param menu 弹出菜单的布局<span style="white-space:pre"></span> * @param buttomview 在哪里弹出的布局<span style="white-space:pre"></span> * @param homeView 想要监听的逐步局,实现,嗲你家空白地方,关闭view<span style="white-space:pre"></span> */<span style="white-space:pre"></span>public Mymenu(Activity activity, View menu, View buttomview, View homeView) {<span style="white-space:pre"></span>this.MENU_VIEW = menu;<span style="white-space:pre"></span>this.BUTTOM_VIEW = buttomview;<span style="white-space:pre"></span>this.contextView = homeView;<span style="white-space:pre"></span>this.activity = activity;<span style="white-space:pre"></span>init();<span style="white-space:pre"></span>}<span style="white-space:pre"></span>/**<span style="white-space:pre"></span> * <span style="white-space:pre"></span> * @param mymenuListem 设置回调监听<span style="white-space:pre"></span> */<span style="white-space:pre"></span>public void setMymenuListem(MymenuListem mymenuListem) {<span style="white-space:pre"></span>this.mymenuListem = mymenuListem;<span style="white-space:pre"></span>}
<span style="white-space:pre"></span>/*
<span style="white-space:pre"></span>* 监听 菜单关闭和打开
<span style="white-space:pre"></span>*/public interface MymenuListem {
public void onMenuClose();
public void onMenuOpen();
}
public class Mymenu {private View MENU_VIEW, BUTTOM_VIEW;private Boolean IsOpen = false;private int MENU_HIGHT = 0;private int BUTTOM_MARGIN_TOP_HIGHT = 0;private int SCREEN_HIGHT = 0;private MymenuListem mymenuListem;private View contextView;private Activity activity;public Mymenu(Activity activity, View menu, View buttomview, View homeView) {this.MENU_VIEW = menu;this.BUTTOM_VIEW = buttomview;this.contextView = homeView;this.activity = activity;init();}public void setMymenuListem(MymenuListem mymenuListem) {this.mymenuListem = mymenuListem;}public void init() {// TODO Auto-generated method stubSCREEN_HIGHT = getScreensHeight(activity);if (MENU_VIEW != null && SCREEN_HIGHT != 0) {ViewPropertyAnimator.animate(MENU_VIEW).translationY(SCREEN_HIGHT).setListener(new AnimatorListener() {@Overridepublic void onAnimationEnd(Animator arg0) {// TODO Auto-generated method stubMENU_VIEW.setVisibility(View.VISIBLE);}@Overridepublic void onAnimationCancel(Animator arg0) {// TODO Auto-generated method stub}@Overridepublic void onAnimationRepeat(Animator arg0) {// TODO Auto-generated method stub}@Overridepublic void onAnimationStart(Animator arg0) {// TODO Auto-generated method stub}});}if (null != contextView) {contextView.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubclosemenu();return true;// 把触摸消耗掉吧}});}}public Boolean getIsOpen() {return IsOpen;}public void setIsOpen(Boolean isOpen) {IsOpen = isOpen;}public void openmenu() {if (!IsOpen) {if (MENU_VIEW.getVisibility() != View.VISIBLE) {MENU_VIEW.setVisibility(View.VISIBLE);}if (MENU_HIGHT == 0) {MENU_HIGHT = MENU_VIEW.getHeight();}if (BUTTOM_MARGIN_TOP_HIGHT == 0) {BUTTOM_MARGIN_TOP_HIGHT = BUTTOM_VIEW.getTop();}ViewPropertyAnimator.animate(MENU_VIEW).setDuration(300).translationY(BUTTOM_MARGIN_TOP_HIGHT - MENU_HIGHT);IsOpen = true;if (null != mymenuListem) {mymenuListem.onMenuOpen();}}}public void closemenu() {if (IsOpen) {if (MENU_VIEW.getVisibility() != View.VISIBLE) {MENU_VIEW.setVisibility(View.VISIBLE);}if (MENU_HIGHT == 0) {MENU_HIGHT = MENU_VIEW.getHeight();}if (BUTTOM_MARGIN_TOP_HIGHT == 0) {BUTTOM_MARGIN_TOP_HIGHT = BUTTOM_VIEW.getTop();}ViewPropertyAnimator.animate(MENU_VIEW).setDuration(300).translationY(BUTTOM_MARGIN_TOP_HIGHT);IsOpen = false;if (null != mymenuListem) {mymenuListem.onMenuClose();}}}public static int getScreensHeight(Activity activity) {DisplayMetrics metrics = new DisplayMetrics();activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);int height = metrics.heightPixels;// 屏幕的高dpint statusBarHeight = getStatusHeight(activity);return height - statusBarHeight;}public static int getStatusHeight(Activity activity) {int statusHeight = 0;Rect localRect = new Rect();activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(localRect);statusHeight = localRect.top;if (0 == statusHeight) {Class<?> localClass;try {localClass = Class.forName("com.android.internal.R$dimen");Object localObject = localClass.newInstance();int i5 = Integer.parseInt(localClass.getField("status_bar_height").get(localObject).toString());statusHeight = activity.getResources().getDimensionPixelSize(i5);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (NumberFormatException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();} catch (NoSuchFieldException e) {e.printStackTrace();}}return statusHeight;}}
0 0
- 用view实现popwindow效果,弹出菜单.
- popwindow实现下拉菜单弹出和收缩效果
- android 随手记 popwindow实现下拉菜单弹出和收缩效果
- popwindow弹出菜单
- 仿微信长按弹出popwindow效果
- 【Android】使用Popwindow实现左侧弹出菜单层
- 【Android】使用Popwindow实现左侧弹出菜单层
- 【Android】创建Popwindow弹出菜单
- PopupWindow实现弹出菜单效果
- popwindow实现下拉菜单
- IOS实现弹出菜单效果MenuViewController(背景 景深 弹出菜单)
- IOS实现弹出菜单效果MenuViewController(背景 景深 弹出菜单)
- Android点击菜单键(menu)弹出popWindow
- Android中popWindow弹出菜单的编写
- jQuery-ajax实现的弹出菜单效果
- [Android实例] popupwindow实现弹出菜单效果
- Android DialogFragment实现底部弹出菜单效果
- android popwindow 实现下拉菜单
- 【北大先修课】【先修课Code打包】
- Node.js开发环境搭建(Windows+Linux)
- 9.HelloWorld之Menu中加入Activity
- MVC路由规则调试。
- 商品或彩票的距离截止日期倒计时功能
- 用view实现popwindow效果,弹出菜单.
- Ruby On Rails --环境搭建之回眸一笑
- 1409232238-hd-Digital Roots
- iOS安全攻防(十八):数据保护API
- iOS开发之UITableView全面解析
- UbuntuKylin14LTS,给python3.4装Django,遇ImportError: No module named setuptools的解决
- meta programming
- 小鱼有话说
- C++ lambda 表达式