设计目标实现

点击一个Button触发显示PopWindow的OnClick响应,在Button上方出现PopWindow。点击其它地方PopWindow消失。

出现问题

点击其它地方没有问题,但是单击Button会使PopWindow先消失,随后触发Button的onclick又产生PopWindow。

解决思路(如果有其它思路欢迎告知)

利用延迟消失,在触发Button响应后再消失PopWindow。300毫秒是在本人手机上较合理的间隔,

间隔太短比如100ms依旧会出现Buttn响应在Touch响应之前,没有达到延迟效果。时间太长则影响用户体验。

关于返回值的问题

该OnTouchListener并不是覆盖源代码中的响应。如果返回值true,源代码中认为你已经处理了touch响应,

它不会再处理。返回值为false时,源代码中会继续执行关于其定义好的touch响应。如果我将返回值设置为

false时,会发生popwindow先消失再出现再消失的现象,这是因为先触发了源代码中的dismiss()方法,

然后又触发自己的Button的onClick响应,最后才轮到延时的dismiss()方法。

popMenu.setTouchInterceptor(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
    mHandler.postDelayed(new Runnable() {
        @Override
        public void run() {
            dismissPopMenu();
        }},300);
    if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
            return true;
    }
            return false;
}

总结:源代码是程序员无尽的宝藏 one piece!

posted on 2012-12-07 17:17  Drinking  阅读(1731)  评论(0编辑  收藏  举报