Add hitSlop prop on iOS and Android

Summary:New prop `hitSlop` allows extending the touch area of Touchable components. This makes it easier to touch small buttons without needing to change your styles.

It takes `top`, `bottom`, `left`, and `right` same as the `pressRetentionOffset` prop. When a touch is moved, `hitSlop` is combined with `pressRetentionOffset` to determine how far the touch can move off the button before deactivating the button.

On Android I had to add a new file `ids.xml` to generate a unique ID to use for the tag where I store the `hitSlop` state. The iOS side is more straightforward.

terribleben worked on the iOS and JS parts of this diff.

Fixes #110
Closes https://github.com/facebook/react-native/pull/5720

Differential Revision: D2941671

Pulled By: androidtrunkagent

fb-gh-sync-id: 07e3eb8b6a36eebf76968fdaac3c6ac335603194
shipit-source-id: 07e3eb8b6a36eebf76968fdaac3c6ac335603194
This commit is contained in:
Jesse Ruder
2016-02-16 16:50:35 -08:00
committed by facebook-github-bot-7
parent ecf6981093
commit 0176ac488e
15 changed files with 225 additions and 8 deletions

View File

@@ -0,0 +1,28 @@
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.react.touch;
import android.graphics.Rect;
import javax.annotation.Nullable;
/**
* This interface should be implemented by all {@link View} subclasses that want to use the
* hitSlop prop to extend their touch areas.
*/
public interface ReactHitSlopView {
/**
* Called when determining the touch area of a view.
* @return A {@link Rect} representing how far to extend the touch area in each direction.
*/
public @Nullable Rect getHitSlopRect();
}