TouchDelegate的用法

下面是TouchDelegate的官方描述

Helper class to handle situations where you want a view to have a larger touch area than its actual view bounds. The view whose touch area is changed is called the delegate view. This class should be used by an ancestor of the delegate. To use a TouchDelegate, first create an instance that specifies the bounds that should be mapped to the delegate and the delegate view itself.

The ancestor should then forward all of its touch events received in its onTouchEvent(MotionEvent) to onTouchEvent(MotionEvent).

大概是说处理这样一种情况,使view的点击区域大于他的实际尺寸。被改变的点击区域的view称为delegate view。

用法:

1. 这个类要被delegate view的父使用;

2. 这个父要在onTouchEvent()处理自己的所有触摸事件

注意:

点击view的实际尺寸区域,会按照正常的逻辑处理view触摸事件;点击扩展的区域,程序会通过TouchDelegate的onTouchEvent()走到view的处理逻辑,区别是后面这个处理的点击坐标和前面不同,扩展区域的点击坐标是不变的,无论点在扩展区域的任何地方,坐标都是(getWidget() / 2, getHeight() / 2),如果MOVE到扩展区域外,则坐标会是一个不变的负数(-(slot * 2), -(slot * 2))


TouchDelegate的使用

View parent = (View)v.getParent();
parent.post(new Runnable() {
 @Override
public void run() {
Rect delegateArea = new Rect();
ChildView delegate = v;
delegate.getHitRect(delegateArea);
delegateArea.bottom += 200;
TouchDelegate expandedArea = new TouchDelegate(delegateArea,
delegate);
if (View.class.isInstance(delegate.getParent())) {
((View) delegate.getParent())
.setTouchDelegate(expandedArea);
}
}
});

 
parent的处理 

@Override
	public boolean onTouchEvent(MotionEvent event){	
		return super.onTouchEvent(event);
	}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值