本篇文章给大家分享的是有关Android开发中实现一个弹出框的方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
截图:
动画效果介绍:
点击ActionBar上“+”按钮,菜单从上方弹出(带反弹效果);
2.再次点击“+”、点击空白区域或者点击返回键,菜单向上方收起;
3.点击弹出框上的按钮时,该按钮放大,其它按钮缩小,菜单整体渐变退出。
主体代码:
1.Activity.
public class MainActivity extends ActionBarActivity { //用于标记页面顶端位置 private View topView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); topView = findViewById(R.id.main_top); } private PopupWindow popupWindow; private int line1DeltaY, line2DeltaY; //仿易信更多弹出框 private void showPopup() { if (popupWindow == null) { View contentView = LayoutInflater.from(this).inflate(R.layout.yixin_pop_layout, null); //点击空白区域关闭 View blankView = contentView.findViewById(R.id.yixin_more_blank); View blankView2 = contentView.findViewById(R.id.yixin_more_blank2); initItems(contentView); //测量高度 int line2Height = ViewUtils.getViewMeasuredHeight(itemViews[0]); line1DeltaY = -getActionBarHeight() - 40; line2DeltaY = line1DeltaY - line2Height; blankView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismissPopup(); } }); blankView2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismissPopup(); } }); popupWindow = new PopupWindow(contentView, ScreenUtils.getScreenW(this), ScreenUtils.getScreenH(this)); //随便设置一个drawable作为背景 popupWindow.setBackgroundDrawable(new ColorDrawable()); } if (!popupWindow.isShowing()) { popupWindow.showAsDropDown(topView, 0, 0); for (int i = 0; i < itemViews.length; i++) { if (i < 3) { //第一行 itemViews[i].startAnimation(AnimationHelper.createPopupAnimIn(this, line1DeltaY)); } else { //第二行 itemViews[i].startAnimation(AnimationHelper.createPopupAnimIn(this, line2DeltaY)); } } popupWindow.getContentView().startAnimation(AnimationHelper.createPopupBgFadeInAnim()); } } private void dismissPopup() { if (popupWindow == null || !popupWindow.isShowing()) { return; } ViewGroup contentView = (ViewGroup) popupWindow.getContentView(); contentView.startAnimation(AnimationHelper.createPopupBgFadeOutAnim(AnimationHelper.TIME_OUT)); for (int i = 0; i < itemViews.length; i++) { if (i < 3) { //第一行 itemViews[i].startAnimation(AnimationHelper.createPopupAnimOut(this, line1DeltaY)); } else { //第二行 itemViews[i].startAnimation(AnimationHelper.createPopupAnimOut(this, line2DeltaY)); } } //动画结束时隐藏popupWindow contentView.postDelayed(new Runnable() { @Override public void run() { popupWindow.dismiss(); } }, AnimationHelper.TIME_OUT + 10); } private View[] itemViews; //初始化popupWindow上的按钮 private void initItems(View parent) { int[] viewIds = new int[]{R.id.yixin_more_item1, R.id.yixin_more_item2, R.id.yixin_more_item3, R.id.yixin_more_item4, R.id.yixin_more_item5, R.id.yixin_more_item6}; itemViews = new View[viewIds.length]; int itemWidth = ScreenUtils.getScreenW(this) / 3; OnClickImpl l = new OnClickImpl(); for (int i = 0; i < viewIds.length; i++) { int id = viewIds[i]; itemViews[i] = parent.findViewById(id); GridLayout.LayoutParams p = (GridLayout.LayoutParams) itemViews[i].getLayoutParams(); p.width = itemWidth; itemViews[i].setLayoutParams(p); itemViews[i].setOnClickListener(l); } } private class OnClickImpl implements View.OnClickListener { @Override public void onClick(View v) { final int viewId = v.getId(); //背景动画 popupWindow.getContentView().startAnimation(AnimationHelper.createPopupBgFadeOutAnim(AnimationHelper.TIME_OUT_CLICK)); //动画结束时隐藏popupWindow v.postDelayed(new Runnable() { @Override public void run() { popupWindow.dismiss(); //动画结束时响应点击事件 handleEvent(viewId); } }, AnimationHelper.TIME_OUT_CLICK + 10); //按钮动画 for (View item : itemViews) { if (item.getId() == v.getId()) { //点击的按钮,放大 item.startAnimation(AnimationHelper.createPopupItemBiggerAnim(MainActivity.this)); } else { //其它按钮,缩小 item.startAnimation(AnimationHelper.createPopupItemSmallerAnim(MainActivity.this)); } } } } //popupWindow上按钮的点击事件 private void handleEvent(int viewId) { Toast.makeText(this, "点击了按钮:" + viewId, Toast.LENGTH_SHORT).show(); } private int getActionBarHeight() { return getSupportActionBar().getHeight(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_more) { if (popupWindow == null || !popupWindow.isShowing()) { showPopup(); } else { dismissPopup(); } return true; } return super.onOptionsItemSelected(item); } //点击返回键时,如果popupWindow是显示状态,则关闭它 @Override public void onBackPressed() { if (popupWindow != null && popupWindow.isShowing()) { dismissPopup(); return; } super.onBackPressed(); }}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1142
183.71 KB下载数642
644.84 KB下载数2755
相关文章
发现更多好内容猜你喜欢
AI推送时光机Android开发中实现一个弹出框的方法
后端开发2023-05-31
Android开发之AlertDialog实现弹出对话框
后端开发2024-04-02
怎么在Android中实现一个信息弹出框
后端开发2023-06-14
Android Studio中实现弹出提示框的两种方法
后端开发2023-10-04
Android实现弹出登陆框的方案
后端开发2022-06-06
Android仿微信进度弹出框的实现方法
后端开发2022-06-06
Android 开发中怎么实现弹出软键盘
后端开发2023-05-31
Android实现弹出键盘的方法
后端开发2022-06-06
怎么在Android应用中利用模板实现一个Popwindow弹出框
后端开发2023-05-31
在Android项目中实现一个底部支付弹窗的方法
后端开发2023-05-31
Android开发中怎么实现一个输入框提示功能
后端开发2023-05-31
Android开发中怎么实现一个对话框交互功能
后端开发2023-05-31
在Android中使用PopupWindow实现一个弹出分享功能
后端开发2023-05-31
Android开发中实现单选或多选对话框的方法
后端开发2023-05-31
Android编程实现AlertDialog自定义弹出对话框的方法示例
后端开发2023-05-30
Android游戏开发学习①弹跳小球实现方法
后端开发2022-06-06
Android开发必知 九种对话框的实现方法
后端开发2022-06-06
咦!没有更多了?去看看其它编程学习网 内容吧