Android弹出式菜单-一种简单的实现方式
来源:互联网 发布:乎乎合适的词 编辑:程序博客网 时间:2024/05/20 09:48
最近在使用百度阅读看书,发现上边有个有趣的小东西,就是弹出式菜单,还附有声音。其实,这种弹出式菜单,早些时候还是挺火的,不少app都有这样的一个菜单效果;最近貌似少见了些。这里就提供一种简单的实现方式
上图
效果分析
当没有菜单没有展示时,点击图标,菜单向上弹出,并有回弹的效果
当菜单已经展示时,点击图标,菜单回收;点击相应的菜单,菜单收回,调用定义的接口
实现
1 该类继承RelativeLayout
2 将菜单相应的添加到该自定义View上:图标最后添加,保证在最上层;其他菜单被覆盖在下方
3 点击事件的处理:因为这只是一种简单的实现,并没有添加触摸拖动的效果等,可以通过设置每个子view的OnClickListener事件来实现
4 弹出效果:可以通过属性位移动画实现;通过设置属性动画的Interpolator(插值器)为OvershootInterpolator,就会产生回弹效果。google官方提供了一系列的插值器,可以满足大部分的需要;当然也可以根据需要实现自己的插值器
5 事件回调:可以通过定义接口,在需要该view的地方,实现该接口,即可获取每个菜单的操作响应(至于接口需要返回什么参数,这个可以根据实际情况来决定);这里我只是简单的返回一个int值,代表某个菜单的点击
关键代码
// 弹出菜单protected void showMenu() { ObjectAnimator firstAnimator = ObjectAnimator.ofFloat(firstView, "translationY", 0, -(height + 80) * 3); ObjectAnimator secondAnimator = ObjectAnimator.ofFloat(secondView, "translationY", 0, -(height + 80) * 2); ObjectAnimator thirdAnimator = ObjectAnimator.ofFloat(thirdView, "translationY", 0, -(height + 80) * 1); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.setDuration(500); animatorSet.setInterpolator(new OvershootInterpolator()); animatorSet.playTogether(firstAnimator, secondAnimator, thirdAnimator); animatorSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); isAnimating = false; } }); animatorSet.start(); }
// 隐藏菜单protected void hideMenu() { ObjectAnimator firstAnimator = ObjectAnimator.ofFloat(firstView, "translationY", firstView.getTranslationY(), 0); ObjectAnimator secondAnimator = ObjectAnimator.ofFloat(secondView, "translationY", secondView.getTranslationY(), 0); ObjectAnimator thirdAnimator = ObjectAnimator.ofFloat(thirdView, "translationY", thirdView.getTranslationY(), 0); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.setDuration(500); animatorSet.setInterpolator(new AccelerateDecelerateInterpolator()); animatorSet.playTogether(firstAnimator, secondAnimator, thirdAnimator); animatorSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); isAnimating = false; } }); animatorSet.start(); }
联想
现在这种弹出式菜单有很多的开源框架,实现的效果也是多种多样。我们可以在这个实现的思路上,进一步拓展
弹出方式:三角形,十字形,圆形等
下载地址
源码下载
0 0
- Android弹出式菜单-一种简单的实现方式
- 弹出式菜单的实现
- 弹出式菜单的简单使用
- android简单实例--------普通菜单optionMenu,上下文菜单ContextMenu,弹出式菜单的使用PopuMenu(一)
- android简单实例--------普通菜单optionMenu,上下文菜单ContextMenu,弹出式菜单的使用PopuMenu(二)
- android简单实例--------普通菜单optionMenu,上下文菜单ContextMenu,弹出式菜单的使用PopuMenu(三)
- [Web]最简单的方法实现工具条菜单上的弹出式菜单
- VB实现窗口的弹出式菜单
- Windows学习心得【弹出式菜单的实现】
- js实现弹出式菜单
- android 弹出式菜单
- Android基础知识--弹出式菜单
- Android 底部弹出式菜单
- 一种简单的小型企业报表实现方式
- java实现多线程的一种简单方式
- 弹出式菜单的代码
- 弹出式菜单的响应
- qt的弹出式菜单
- Linux ssh安全配置
- RxJava 并发之意外情况处理
- 室内可见光定位系统的多径反射研究
- Linux U盘启动盘制作出现的问题
- mysql安装图解 mysql图文安装教程(详细说明)
- Android弹出式菜单-一种简单的实现方式
- vs2010+opencv2.4.9配置笔记
- 类型转换
- fatal: Not a git repository (or any of the parent&n
- PCIe之DMA (二)
- linux学习笔记之小谈时钟时间,用户CPU时间,系统CPU时间 .
- android开发之R文件报错
- 决战Myeclipse+tomcat+jdk
- python笔记-import用法