Skip to content

Commit 473ccfa

Browse files
authored
Merge pull request #116 from 6pm/master
Add strokeWidth support for Android. Update propTypes
2 parents 5f99394 + bd76b60 commit 473ccfa

File tree

5 files changed

+196
-13
lines changed

5 files changed

+196
-13
lines changed

SignatureCapture.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,11 @@ SignatureCapture.propTypes = {
9797
showBorder: PropTypes.bool,
9898
showNativeButtons: PropTypes.bool,
9999
showTitleLabel: PropTypes.bool,
100-
maxSize:PropTypes.number
100+
maxSize:PropTypes.number,
101+
minStrokeWidth: PropTypes.number,
102+
maxStrokeWidth: PropTypes.number,
103+
strokeColor: PropTypes.string,
104+
backgroundColor: PropTypes.string
101105
};
102106

103107
var RSSignatureView = requireNativeComponent('RSSignatureView', SignatureCapture, {

android/src/main/java/com/rssignaturecapture/RSSignatureCaptureMainView.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ public RSSignatureCaptureMainView(Context context, Activity activity) {
5959
ViewGroup.LayoutParams.MATCH_PARENT));
6060
}
6161

62+
public RSSignatureCaptureView getSignatureView() {
63+
return signatureView;
64+
}
65+
6266
public void setSaveFileInExtStorage(Boolean saveFileInExtStorage) {
6367
this.saveFileInExtStorage = saveFileInExtStorage;
6468
}

android/src/main/java/com/rssignaturecapture/RSSignatureCaptureView.java

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ public class RSSignatureCaptureView extends View {
5151
private Canvas mSignatureBitmapCanvas = null;
5252
private SignatureCallback callback;
5353
private boolean dragged = false;
54-
private int SCROLL_THRESHOLD = 50;
54+
private boolean multipleTouchDragged = false;
55+
private int SCROLL_THRESHOLD = 5;
5556

5657
public interface SignatureCallback {
5758
void onDragged();
@@ -197,6 +198,18 @@ private void ensureSignatureBitmap() {
197198
}
198199
}
199200

201+
public void setMinStrokeWidth(int minStrokeWidth) {
202+
mMinWidth = minStrokeWidth;
203+
}
204+
205+
public void setMaxStrokeWidth(int maxStrokeWidth) {
206+
mMaxWidth = maxStrokeWidth;
207+
}
208+
209+
public void setStrokeColor(int color) {
210+
mPaint.setColor(color);
211+
}
212+
200213
private float strokeWidth(float velocity) {
201214
return Math.max(mMaxWidth / (velocity + 1), mMinWidth);
202215
}
@@ -226,35 +239,42 @@ private ControlTimedPoints calculateCurveControlPoints(TimedPoint s1, TimedPoint
226239

227240
@Override
228241
public boolean onTouchEvent(MotionEvent event) {
229-
if (!isEnabled())
242+
if (!isEnabled() || event.getPointerCount() > 1 || (multipleTouchDragged && event.getAction() != MotionEvent.ACTION_UP)) {
243+
multipleTouchDragged = true;
230244
return false;
245+
}
231246

232247
float eventX = event.getX();
233248
float eventY = event.getY();
234249

235250
switch (event.getAction()) {
236251
case MotionEvent.ACTION_DOWN:
252+
mLastTouchX = eventX;
253+
mLastTouchY = eventY;
237254
getParent().requestDisallowInterceptTouchEvent(true);
238255
mPoints.clear();
239256
mPath.moveTo(eventX, eventY);
240-
mLastTouchX = eventX;
241-
mLastTouchY = eventY;
242257
addPoint(new TimedPoint(eventX, eventY));
243258

244259
case MotionEvent.ACTION_MOVE:
260+
if((Math.abs(mLastTouchX - eventX) < SCROLL_THRESHOLD || Math.abs(mLastTouchY - eventY) < SCROLL_THRESHOLD) && dragged) {
261+
return false;
262+
}
245263
resetDirtyRect(eventX, eventY);
246264
addPoint(new TimedPoint(eventX, eventY));
247-
if((Math.abs(mLastTouchX - eventX) > SCROLL_THRESHOLD || Math.abs(mLastTouchY - eventY) > SCROLL_THRESHOLD)){
248-
dragged = true;
249-
}
265+
dragged = true;
250266
break;
251267

252268
case MotionEvent.ACTION_UP:
253-
resetDirtyRect(eventX, eventY);
254-
addPoint(new TimedPoint(eventX, eventY));
255-
getParent().requestDisallowInterceptTouchEvent(true);
256-
setIsEmpty(false);
257-
sendDragEventToReact();
269+
if(mPoints.size() >= 3) {
270+
resetDirtyRect(eventX, eventY);
271+
addPoint(new TimedPoint(eventX, eventY));
272+
getParent().requestDisallowInterceptTouchEvent(true);
273+
setIsEmpty(false);
274+
sendDragEventToReact();
275+
}
276+
dragged = false;
277+
multipleTouchDragged = false;
258278
break;
259279

260280
default:

android/src/main/java/com/rssignaturecapture/RSSignatureCaptureViewManager.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.rssignaturecapture;
22

33
import android.util.Log;
4+
import android.graphics.Color;
45

56
import com.facebook.infer.annotation.Assertions;
67
import com.facebook.react.bridge.ReactApplicationContext;
@@ -21,6 +22,10 @@ public class RSSignatureCaptureViewManager extends ViewGroupManager<RSSignatureC
2122
public static final String PROPS_VIEW_MODE = "viewMode";
2223
public static final String PROPS_SHOW_NATIVE_BUTTONS="showNativeButtons";
2324
public static final String PROPS_MAX_SIZE="maxSize";
25+
public static final String PROPS_MIN_STROKE_WIDTH="minStrokeWidth";
26+
public static final String PROPS_MAX_STROKE_WIDTH="maxStrokeWidth";
27+
public static final String PROPS_STROKE_COLOR="strokeColor";
28+
public static final String PROPS_BACKGROUND_COLOR="backgroundColor";
2429

2530
public static final int COMMAND_SAVE_IMAGE = 1;
2631
public static final int COMMAND_RESET_IMAGE = 2;
@@ -70,6 +75,37 @@ public void setPropsWidth(RSSignatureCaptureMainView view, @Nullable Integer max
7075
}
7176
}
7277

78+
@ReactProp(name = PROPS_MIN_STROKE_WIDTH)
79+
public void setPropsMinStrokeWidth(RSSignatureCaptureMainView view, @Nullable int minStrokeWidth) {
80+
Log.d("minStrokeWidth:", ""+minStrokeWidth);
81+
if(view!=null){
82+
view.getSignatureView().setMinStrokeWidth(minStrokeWidth);
83+
}
84+
}
85+
86+
@ReactProp(name = PROPS_MAX_STROKE_WIDTH)
87+
public void setPropsMaxStrokeWidth(RSSignatureCaptureMainView view, @Nullable int maxStrokeWidth) {
88+
Log.d("maxStrokeWidth:", ""+maxStrokeWidth);
89+
if(view!=null){
90+
view.getSignatureView().setMaxStrokeWidth(maxStrokeWidth);
91+
}
92+
}
93+
94+
@ReactProp(name = PROPS_STROKE_COLOR)
95+
public void setPropsStrokeColor(RSSignatureCaptureMainView view, @Nullable String color) {
96+
Log.d("strokeColor:", ""+color);
97+
if(view!=null){
98+
view.getSignatureView().setStrokeColor(Color.parseColor(color));
99+
}
100+
}
101+
102+
@ReactProp(name = PROPS_BACKGROUND_COLOR)
103+
public void setPropsBackgroundColor(RSSignatureCaptureMainView view, @Nullable String color) {
104+
Log.d("backgroundColor:", ""+color);
105+
if(view!=null){
106+
view.getSignatureView().setBackgroundColor(Color.parseColor(color));
107+
}
108+
}
73109

74110
@Override
75111
public RSSignatureCaptureMainView createViewInstance(ThemedReactContext context) {

package-lock.json

Lines changed: 119 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)