天天看点

PopupWindow实现仿iOS QQ音乐上拉菜单栏(支持手势以及点击操作)

能力ok的小伙伴可以不看n2,源码在最下面

今天早上一个andorid群的小伙伴问了我一些popupwindow的问题,正好昨天晚上我注意到qq音乐的一个菜单栏,那么今天就按照那个实现做一下(ui瞎凑合的你懂的)

先上下原图:

PopupWindow实现仿iOS QQ音乐上拉菜单栏(支持手势以及点击操作)

再贴一下我们的效果(除了长得不像也没什么,哈哈哈):

PopupWindow实现仿iOS QQ音乐上拉菜单栏(支持手势以及点击操作)

1:底部popupwindow呈现

2:手势动作操作控件

3:按钮操作控件

4:控件内部的点击事件

分析:

首先这是一个标准的底部的popupwindow,pop(之后都这么简写了)内部有2排,每一排都有一系列按钮,

每一个按钮都有它的点击事件,pop支持手势显示or隐藏,这一系列就是我们要做的事,让我们带着需求来看代码。

包结构:

PopupWindow实现仿iOS QQ音乐上拉菜单栏(支持手势以及点击操作)

这次没像以前,写一个demo我导了一堆包,这次就用了log的库:

gradle:

实现类就一个<code>public class homeactivity extends root implements view.onclicklistener, view.ontouchlistener</code>

例子里有一大堆的findid的东西,其实可以用注解来做这些事,可以参考http://blog.csdn.net/ddwhan0123/article/details/47399259

onclicklistener来解决我们所有的点击事件,从按钮到pop中的小图标

ontouchlistener来解决我们滑动操作的业务,隐藏/显示 pop用

具体滑动隐藏/显示的方法:

movey 是一个滑动距离判断值,定义多场多端你自己决定吧

motionevent.action_down 触摸到屏幕的那一刻 记录一个坐标。

motionevent.action_up 手指离开时的坐标,然后?

加加减减就出结果了,是不是so easy?

1.如何控制pop的位置?

popupwindow.showatlocation();

如果只是设置在空间的下面只需要

左边:

右边:

2.pop中,所有小控件都是遵循于<code>style="@style/poptheme"</code>,那这部分又是如何操作的?

style!!

style是针对窗体元素级别的,改变指定控件或者layout的样式。 那再说下theme: theme是针对窗体级别的,改变窗体样式

2.1 how to use style?

1.在res/values 目录下新建一个名叫style.xml的文件。增加一个<code>&lt;resources&gt;</code>根节点。 2.对每一个风格和主题,给<code>&lt;style&gt;</code>element增加一个全局唯一的名字,也可以选择增加一个父类属性。在后边我们可以用这个名字来应用风格,而父类属性标识了当前风格是继承于哪个风格。 3.在<code>&lt;style&gt;</code>元素内部,申明一个或者多个<code>&lt;item&gt;</code>,每一个<code>&lt;item&gt;</code>定义了一个名字属性,并且在元素内部定义了这个风格的值。 4.你可以应用在其他xml定义的资源。

源码地址:https://github.com/ddwhan0123/blogsample/tree/master/popupwindowdemo

PopupWindow实现仿iOS QQ音乐上拉菜单栏(支持手势以及点击操作)