还是这个项目----音乐播放器。
用了别人的源码,slideup什么的,就是从下往上滑动的效果,是一个自定义view继承子viewgroup。
我需要的效果,点击音乐目录,出现一个音乐控制面板替换掉隐藏的页面,按退出,隐藏的页面往下退出。看起来很简单,因为别人的源码已经实现了这一点。
但是,真正做起来就遇到问题了。
首先,此时显示的音乐控制面板(先隐藏,后显示)按退出键没反应,我加了一个log发现,更不就没有调用这个方法。
遇到问题,好办,上网查,有人说焦点问题,然后我设置setfocused(),另外还有个类似的方法,没搞懂两者区别。我都试了试,不论是在view的构造函数中加入这个方法还是在MainActivity中加入v.setfocused都没用,后来发现了,在他的源码中重写了事件拦截方法,不过一查,发现事件拦截方法拦截的是手势,而不是按键。
好吧,继续上网,终于找到了,在MainActivity中的onkeydown方法中调用自定义view的onkeydown方法,效果达到。
怀着高兴的心情点了一首歌听听,结果发现,没反应,点一下它就缩下去隐藏好了,这不对啊,查看他的源码,发现,这次终于是事件拦截方法惹的祸了,他返回值是判断隐藏的页面是否展开的,如果展开就为true,否则为false,我在隐藏页面展开的时候点击播放按钮,页面网下滑动隐藏掉了,就是这的问题,我改为return fale;问题成功解决。
问题是解决了,但是对事件分发还是有些不清晰,明日仔继续研究
补充:
我给textview设置setontouchlistener,
结果发现,touchevent的坐标是以本控件的左上角为原点的,这里很重要,如果这个控件在下面,手势移动到了控件的上边,则y值为负数
同理,如果移动到了控件的左边,则x值为负数,至于右边和下面嘛,到都是正数。