文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android开发中实现一个弹出框的方法

2023-05-31 14:00

关注

本篇文章给大家分享的是有关Android开发中实现一个弹出框的方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

截图:

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯