天天看点

[Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)

    这篇文章主要是自己研究如何对底部菜单进行布局,并简单的实现点击不同"按钮"实现图片切换和背景切换的功能,最后通过popupwindows实现弹出菜单,点击不同按钮能实现不同方法,相当于美图秀秀编辑图片的功能吧!它并没有涉及到fragment碎片切换页面的功能,因为页面始终显示被处理的图片.这是我初学android的一篇基础性文章和在线思想笔记,网上有很多更优秀的demo,不过也希望对大家有用~

    首先介绍两种方法实现底部菜单点击不同图标显示选中状态的效果.

它显示的效果如下图所示,其中底部菜单布局采用多个linearlayout进行,点击不同"按钮"可以改变其背景图片.

[Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)
[Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)

首先介绍它的activity_main.xml布局:

    1.它采用3个relativelayout相对布局进行,分别对应标题路径、中间显示图片和底部的菜单栏;

    2.底部菜单栏由5个linearlayout水平布局组成,每一个linearlayout都由imageview和textview组成.

    代码如下:

    此时你需要注意的是为每个linearlayout中imageview指定src时并不是原图片,而是drawable中的xml文件,如<imageview android:id="@+id/image_watch".. />.

[Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)

    同时每个drawable中的xml文件对应每个相应的按钮,上图中effect(效果)、increase(增强)、frame(相框)、watch(查看)、person(美白).其中每个格式基本如下,如tab_watch_btn.xml:

    其中state_selected表示"选中"状态,state_pressed表示"点击"效果,而最后的<item android:drawable="@drawable/image_icon_watch_nor"/> 表示默认情况显示图片,原图片如下:

[Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)

    同时设置选中状态"按钮"的背景加黑效果,在drawable中添加selector_tab_background.xml文件:

    然后在mainactivity.java中添加自定义变量,主要是linearlayout(点击它响应事件)和imageview(切换图标).

然后添加代码如下,该种方法需要在点击按钮中设置其他linearlayout图标状态为未选择状态,否则会出现点击按钮的效果(即:点击就切换图标一次,我们需要的是点击就状态长显).

   其中activity_main.xml中布局与第一个相同,不同的是在xml中就指定drawable-hdpi中原图片名,因为它不在调用drawable如tab_watch_btn.xml文件,而使用代码直接操作.其中5个linearlayout一个如下所示:

   此时它的文件夹结构如下图,drawble没有设置背景加深和加载图标的xml文件:

[Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)

同时5个linearlayout(查看、增强、特效、相框、美白)设置触屏响应事件:

   需要注意的是网上下面这段代码仅实现点击一下图片变换的效果,而如果想要实现长显需要如我上面的所示.还见到一个使用radio实现该效果,当点击一次时判断是否选中并显示相应图片.而使用fragmenttabhost实现同样效果,我不知其原理~

    然后讲解如何通过popupwindow实现下面的功能.效果如下图所示,简单实现popupwindow功能可结合下面两篇文章:

[Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)
[Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)

首先,为popupwindow设置动画效果,在res文件夹下添加文件夹anim,然后添加anim_entry.xml文件:

   它是出现效果:从菜单栏底部向上弹出,同时添加anim_exit.xml:

   最后在res/values文件夹styles.xml中添加动画效果,通过调用name="animationpreview"可以实现动画:

   然后你需要自定义弹出popupwindow的布局xml文件,如popup_effect.xml:

   它的在xml中graphical layout显示效果如下图所示:

[Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)
[Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)

添加5个自定义变量:

   然后当点击"相框"布局linearlayout时,添加代码如下(其他类似):

   其中initmpopupwindowview(int number)为自定义函数,参数对应的是点击linearlayout的序号,点击"按钮"4即传入数字4:

做到这里,你就能实现点击底部菜单实现弹出popupwindows效果,但显然是不足的.怎样通过点击弹出popupwindow中的按钮实现做不同的事情呢?下面讲解,你只需要添加下面的代码即可实现"特效"效果.

[Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)
[Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)

代码如下,你可以自定义函数实现不同效果功能(结合前面几篇文章,我的美图秀秀基本完成):

本文章主要讲述如何加载菜单栏在底部,同时讲述popupwindows弹出事件,其实更好的布局方法是通过适配器,但是我才学android,很多东西还不懂.所以它只是一篇初级文章,但完全能实现需要功能.

    最后希望文章对大家有所帮助,如果文章中有错误或不足之处见谅~

    上联:只有真正的做了,才知道自己的技术有多渣

    下联:只有真正做完了,才知道自己的成就有多高

    横批:同志仍需努力

                                  ——by:eastmount

继续阅读