最近在网上看了一些文章介绍使用PopupWindow实现 微信弹出菜单,于是乎自己也实现了一下,分享一下!

原理:主要是 popupWindow.setAnimationStyle(R.style.popuStyle);//设置 popupWindow 动画样式


运行效果截图



package com.example.test;import android.app.Activity;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup.LayoutParams;import android.widget.Button;import android.widget.LinearLayout;import android.widget.PopupWindow;public class MainActivity extends Activity implements OnClickListener {private PopupWindow popupWindow;private Button bt_popup;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findView();}private void findView() {bt_popup = (Button) findViewById(R.id.bt_popup);bt_popup.setOnClickListener(this);}private void showPopupWindow() {View view = (LinearLayout) LayoutInflater.from(MainActivity.this).inflate(R.layout.popmenu, null);Button bt_clear = (Button) view.findViewById(R.id.bt_clear);Button bt_exit = (Button) view.findViewById(R.id.bt_exit);bt_clear.setOnClickListener(this);bt_exit.setOnClickListener(this);if (popupWindow == null) {popupWindow = new PopupWindow(MainActivity.this);popupWindow.setBackgroundDrawable(new BitmapDrawable());//popupWindow.setFocusable(true); // 设置PopupWindow可获得焦点popupWindow.setTouchable(true); // 设置PopupWindow可触摸popupWindow.setOutsideTouchable(true); // 设置非PopupWindow区域可触摸popupWindow.setContentView(view);popupWindow.setWidth(LayoutParams.MATCH_PARENT);popupWindow.setHeight(LayoutParams.WRAP_CONTENT);popupWindow.setAnimationStyle(R.style.popuStyle);//设置 popupWindow 动画样式}popupWindow.showAtLocation(bt_popup, Gravity.BOTTOM, 0, 0);popupWindow.update();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.bt_popup:showPopupWindow();break;case R.id.bt_exit:popupWindow.dismiss();break;case R.id.bt_clear:popupWindow.dismiss();break;default:break;}}}


注意:popupWindow 的 showAtLocation(parent, gravity, x, y); 方法 第一个参数 parent 并不一定要求是 Activity 布局中的 根节点 元素,这里我传入了一个 Button

阅读官方文档中的说明 

parent a parent view to get the android.view.View.getWindowToken() token from

只是根据这个parent 获取 WindowToken 而已


popupWindow 动画样式



popup_anim_in.xml

<?xml version="1.0" encoding="utf-8"?>    


popup_anim_out.xml

<?xml version="1.0" encoding="utf-8"?>    







更多相关文章

  1. android页面或组件动画(比如淡出、3D翻转、进入......进入和退出
  2. Android(安卓)属性动画与硬件加速
  3. RecyclerView的简单使用
  4. android 一个可以自定义的进度条控件
  5. Android动画-Interpolator(插值器)
  6. Android(安卓)中Dialog点击空白处會消失问题
  7. 深入浅出 - Android系统移植与平台开发(五)- 定制手机模拟器ROM
  8. Android(安卓):动画的使用(1)
  9. 添加android 4.0 开机音乐

随机推荐

  1. Android(安卓)Handle的使用
  2. Android源码快速查找文件、搜索字符串和
  3. 使用SQLite中自带的API操作SQLite数据库
  4. 开发应用程序的Android(安卓)- 入门
  5. Android 动态加载 ListView 实现
  6. Android的进程
  7. 87、android处理耗时任务
  8. android 视图设置多个setTag数据
  9. 转载:Android判断当前应用是否在前台运行
  10. android生成R.java文件