1.结构目录
2.实现步骤
1.主布局activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/open" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="打开泡泡窗口" /> </RelativeLayout>
2.popupwindow.xml
4.为了实现动画进出效果,定义两个布局文件
<?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" > <GridView android:id="@+id/gv" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#00bfff" android:numColumns="4" > </GridView> </LinearLayout>
3.MainActivity
public class MainActivity extends Activity implements OnClickListener { private Button open; private View parent; private View popView; private PopupWindow popupWindow; private GridView gv; private String[] names = { "生", "如", "夏", "花", "海", "阔", "天", "空" }; private int[] images = { R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); parent = findViewById(R.id.main); open = (Button) findViewById(R.id.open); open.setOnClickListener(this); initPopupWindow(); } /** * 初始化popupWindow */ private void initPopupWindow() { popView = getLayoutInflater().inflate(R.layout.popupwindow, null); popupWindow = new PopupWindow(popView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); popupWindow.setFocusable(true); popupWindow.setBackgroundDrawable(new BitmapDrawable()); popupWindow.setOutsideTouchable(true); gv = (GridView) popView.findViewById(R.id.gv); gv.setAdapter(MyAdapter()); } /** * 为GridView填充数据 * * @return */ private ListAdapter MyAdapter() { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); for (int i = 0; i < names.length; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("names", names[i]); map.put("images", images[i]); list.add(map); } SimpleAdapter simpleAdapter = new SimpleAdapter(this, list, R.layout.pop_item, new String[] { "names", "images" }, new int[] { R.id.tv, R.id.img }); return simpleAdapter; } @Override public void onClick(View v) { //为popWindow添加动画效果 popupWindow.setAnimationStyle(R.style.popWindow_animation); // 点击弹出泡泡窗口 popupWindow.showAtLocation(parent, Gravity.BOTTOM, 0, 0); } }
popupwindow_enter.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="500" android:fromYDelta="100%p" android:toYDelta="0" /> <alpha android:duration="500" android:fromAlpha="0.5" android:toAlpha="1.0" /> </set>5.popupwindow_exit.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <alpha android:duration="500" android:fromAlpha="1.0" android:toAlpha="0.5" /> <translate android:fromYDelta="0" android:toYDelta="100%p" android:duration="500" /> </set>6.style.xml
<style name="popWindow_animation"> <item name="android:windowEnterAnimation">@anim/popupwindow_enter</item> <item name="android:windowExitAnimation">@anim/popupwindow_exit</item> </style>