mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-21 02:26:18 +08:00
Add support for DiffClamp node
Summary: Add native support on iOS and Android for `Animated.diffClamp` that was added in #9419. **Test plan** Tested that it works properly using the native animations UIExplorer example. Closes https://github.com/facebook/react-native/pull/9691 Differential Revision: D3813440 fbshipit-source-id: 48a3ecddf3708fa44b408954d3d8133ec8537f21
This commit is contained in:
committed by
Facebook Github Bot 9
parent
6d978c3c8b
commit
e26c135746
@@ -0,0 +1,53 @@
|
||||
/**
|
||||
* 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.animated;
|
||||
|
||||
import com.facebook.react.bridge.JSApplicationCausedNativeException;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
|
||||
/*package*/ class DiffClampAnimatedNode extends ValueAnimatedNode {
|
||||
private final NativeAnimatedNodesManager mNativeAnimatedNodesManager;
|
||||
private final int mInputNodeTag;
|
||||
private final double mMin;
|
||||
private final double mMax;
|
||||
|
||||
private double mLastValue;
|
||||
|
||||
public DiffClampAnimatedNode(
|
||||
ReadableMap config,
|
||||
NativeAnimatedNodesManager nativeAnimatedNodesManager) {
|
||||
mNativeAnimatedNodesManager = nativeAnimatedNodesManager;
|
||||
mInputNodeTag = config.getInt("input");
|
||||
mMin = config.getDouble("min");
|
||||
mMax = config.getDouble("max");
|
||||
|
||||
mValue = mLastValue = getInputNodeValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
double value = getInputNodeValue();
|
||||
|
||||
double diff = value - mLastValue;
|
||||
mLastValue = value;
|
||||
mValue = Math.min(Math.max(mValue + diff, mMin), mMax);
|
||||
}
|
||||
|
||||
private double getInputNodeValue() {
|
||||
AnimatedNode animatedNode = mNativeAnimatedNodesManager.getNodeById(mInputNodeTag);
|
||||
if (animatedNode == null || !(animatedNode instanceof ValueAnimatedNode)) {
|
||||
throw new JSApplicationCausedNativeException("Illegal node ID set as an input for " +
|
||||
"Animated.DiffClamp node");
|
||||
|
||||
}
|
||||
|
||||
return ((ValueAnimatedNode) animatedNode).mValue;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user