点击控件以外的区域使页面(activity)关闭,dispatchTouchEvent用法

在数据列表页,点击图片,放大显示的功能,放大显示的页面是个ViewPager,显示后,点击viewPager区域外的空白区域可关闭页面。点击ViewPager页面不做响应。

该viewPager设置为宽为match_parent,最大高度为300dp的区域。


关键代码:

@Override
    public boolean dispatchTouchEvent(MotionEvent event){
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            View view = mViewPager;

            if(!inRangeOfView(view,event)){
                click();
            }
        }
        return super.dispatchTouchEvent(event);
    }

    //判断是否在控件区域内
    private boolean inRangeOfView(View view,MotionEvent event){
        int[] location = new int[2];
        view.getLocationOnScreen(location);
        int x = location[0];
        int y = location[1];
        if(event.getX() < x || event.getX() > (x + view.getWidth()) || event.getY() < y || event.getY() > (y + view.getHeight())){
            return false;
        }
        return true;
    }
	
//关闭页面
    public void click(){

//        Intent mIntent = new Intent();
        // 设置结果,并进行传送
//        this.setResult(3, mIntent);
    	System.gc();
		ImageLoader.getInstance().clearMemoryCache();
        finish();
        overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
    }

 
效果:点击中间宽为全屏,高为300dp的ViewPager区域,无响应,点击该区域上方或下方,关闭页面。
 
 
下面附上点击页面任意位置关闭页面,ViewPager的翻页功能不受影响的代码:
@Override
    public boolean dispatchTouchEvent(MotionEvent event){
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            downX = event.getX();
            downY = event.getY();
            LogUtil.d(TAG,"ACTION_DOWN==========downX===="+downX+",downY="+downY);
        }else if(event.getAction() == MotionEvent.ACTION_UP){
            upX = event.getX();
            upY = event.getY();
            LogUtil.d(TAG,"ACTION_UP==========upX===="+upX+",upY="+upY);
            if(Math.abs(upX-downX)<100){
                click();
            }
        }
        return super.dispatchTouchEvent(event);
    }



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值