As android developer docs say about this class :
Helper class to handle situations where you want a view to have a larger touch area than its actual view bounds.
You may require this in some obvious cases such as - when you want to keep the size of a view (let’s name it V
) small to suit your VD, but that size is too small to be conveniently used.
The class is named touch delegate because we are explicitely delegating some extra touches to V
which it won’t have gotten by default.
How you do it? :
First create an instance that takes the delegate view and the bounds that should be mapped to the delegate using the constructor :
public TouchDelegate(Rect bounds, View delegateView)
IMP : bounds
here refers to local coordinates of the containing view
that should be mapped to the delegate view.
It depends on your use case on how you calculate this.
For example, if you just want to increase the touch are of V
in all directions, you could do something like :
final Rect rect = new Rect();
V.getHitRect(rect);
rect.top -= 20;
rect.bottom += 20;
rect.left -= 20;
rect.right += 20;
TouchDelegate touchDelegate = new TouchDelegate(rect, superCardHelp));
Last step is setting this delegate on your container view (parent view of V). This can be done using by the setTouchDelegate
, which essentially also means that you can set only a single touch delegate on the view.
If you go a little deep into how this works, the parentView checks in its onTouchEvent
callback if a touch delegate is there. If it’s there, it calls the onTouchEvent
on the delegate which returns true
if this event was handled. (See the source code here). So, in case you want to override the default behaviour of TouchDelegate
, you can extend this class and override the onTouchEvent
method.
That’s it!
Let me know in case of any issues.
Comments
Post a Comment