Skip to content

Commit 91e6bca

Browse files
committed
size config
1 parent 575560b commit 91e6bca

File tree

10 files changed

+135
-14
lines changed

10 files changed

+135
-14
lines changed

android/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,9 @@ dependencies {
138138
// implementation 'com.google.android.gms:play-services-mlkit-barcode-scanning:18.1.0'
139139
implementation 'com.google.mlkit:barcode-scanning:17.0.3'
140140

141+
implementation 'com.facebook.fresco:fresco:2.5.0'
142+
implementation 'com.facebook.fresco:animated-gif:2.6.0'
143+
141144
// From node_modules
142145
}
143146

android/src/main/java/com/reactnativemlkitbarcode/MlKitBarcodeDecoder.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import android.os.Looper;
77
import android.util.DisplayMetrics;
88
import android.util.Log;
9+
import android.util.Size;
910

1011
import androidx.annotation.NonNull;
1112
import androidx.camera.core.AspectRatio;
@@ -60,8 +61,8 @@ public MlKitBarcodeDecoder(Fragment frag, ReactContext reactContext){
6061
this.reactContext = reactContext;
6162
}
6263

63-
public PreviewView createScannerView(){
64-
this.previewView = new PreviewView(frag.getActivity());
64+
public PreviewView createScannerView(PreviewView previewView){
65+
this.previewView = previewView; //new PreviewView(frag.getActivity());
6566
return this.previewView;
6667
}
6768

@@ -72,6 +73,7 @@ public void setBarCodeFormat(int barcodeFormat){
7273

7374
/////////////////
7475
protected void startCamera() {
76+
Log.e(TAG, "starting Camera:...");
7577
createBarCodeScanner();
7678
mainThreadExecutor = new MainThreadExecutor();
7779

@@ -109,27 +111,35 @@ protected void startCamera() {
109111

110112
@SuppressLint("RestrictedApi")
111113
protected void stopAll(){
114+
Log.e(TAG, "stopping All...");
112115
if(imageAnalysis != null){
113116
imageAnalysis.clearAnalyzer();
114117
}
115118
if(scanner!=null)
116119
scanner.close();
117120
if(cameraProvider!=null){
118121
cameraProvider.unbindAll();
119-
cameraProvider.shutdown();
122+
// cameraProvider.shutdown();
120123
}
121124
}
122125

123126
private Preview getPreview() {
124127
return new Preview.Builder()
125-
.setTargetAspectRatio(aspectRatio())
128+
.setTargetResolution(getRes())
126129
.setTargetRotation(this.previewView.getDisplay().getRotation())
127130
.build();
128131
}
129132

133+
private Size getRes() {
134+
DisplayMetrics displayMetrics = new DisplayMetrics();
135+
this.previewView.getDisplay().getRealMetrics(displayMetrics);
136+
return new Size(displayMetrics.widthPixels,displayMetrics.heightPixels);
137+
}
138+
130139
private int aspectRatio() {
131140
DisplayMetrics displayMetrics = new DisplayMetrics();
132141
this.previewView.getDisplay().getRealMetrics(displayMetrics);
142+
Log.e(TAG, "PreviewSize :: W:"+displayMetrics.widthPixels+", H:"+displayMetrics.heightPixels);
133143
double previewRatio = (double) Math.max(displayMetrics.widthPixels, displayMetrics.heightPixels) / Math.min(displayMetrics.widthPixels, displayMetrics.heightPixels);
134144
if (Math.abs(previewRatio - RATIO_4_3_VALUE) <= Math.abs(previewRatio - RATIO_16_9_VALUE)) {
135145
return AspectRatio.RATIO_4_3;

android/src/main/java/com/reactnativemlkitbarcode/MlKitBarcodeFragment.java

Lines changed: 57 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,14 @@
1010

1111
import androidx.annotation.NonNull;
1212
import androidx.annotation.Nullable;
13+
import androidx.camera.view.PreviewView;
1314
import androidx.fragment.app.Fragment;
1415

16+
import com.facebook.drawee.backends.pipeline.Fresco;
17+
import com.facebook.drawee.interfaces.DraweeController;
18+
import com.facebook.drawee.view.SimpleDraweeView;
19+
import com.facebook.imagepipeline.request.ImageRequest;
20+
import com.facebook.imagepipeline.request.ImageRequestBuilder;
1521
import com.facebook.react.bridge.ReactContext;
1622
import com.facebook.react.uimanager.ThemedReactContext;
1723

@@ -22,6 +28,10 @@ public class MlKitBarcodeFragment extends Fragment {
2228
private ReactContext reactContext;
2329
private int barcodeFormat;
2430

31+
private PreviewView previewView = null;
32+
private int WIDTH = 0;
33+
private int HEIGHT = 0;
34+
private SimpleDraweeView simpleDraweeView = null;
2535

2636
public MlKitBarcodeFragment(ThemedReactContext reactContext, int barcodeFormat) {
2737
this.reactContext = reactContext;
@@ -37,21 +47,62 @@ public MlKitBarcodeDecoder getScannerView(){
3747
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
3848
super.onCreateView(inflater, container, savedInstanceState);
3949
mlKitBarcodeDecoder = new MlKitBarcodeDecoder(this, reactContext);
40-
RelativeLayout relativeLayout = new RelativeLayout(MlKitBarcodeFragment.this.getContext());
41-
relativeLayout.setGravity(Gravity.CENTER);
42-
relativeLayout.addView(mlKitBarcodeDecoder.createScannerView());
4350

44-
return relativeLayout;
45-
// return null;
51+
// RelativeLayout relativeLayout = new RelativeLayout(MlKitBarcodeFragment.this.getContext());
52+
// relativeLayout.setGravity(Gravity.CENTER);
53+
// relativeLayout.addView(mlKitBarcodeDecoder.createScannerView());
54+
55+
56+
View view = inflater.inflate(R.layout.fragview,container,false);
57+
previewView = view.findViewById(R.id.previewView);
58+
59+
simpleDraweeView = view.findViewById(R.id.imgViewGif);
60+
61+
ImageRequest imageRequest = ImageRequestBuilder.newBuilderWithResourceId(R.drawable.scanner2).build();
62+
DraweeController controller = Fresco.newDraweeControllerBuilder().setImageRequest(imageRequest).setAutoPlayAnimations(true).build();
63+
simpleDraweeView.setController(controller);
64+
mlKitBarcodeDecoder.createScannerView(previewView);
65+
return view;
4666
}
4767

4868
@Override
4969
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
5070
super.onViewCreated(view, savedInstanceState);
51-
Log.e(TAG, "onViewCreated: ");
71+
Log.e(TAG, "onViewCreated: W:"+WIDTH+", H:"+HEIGHT);
5272
mlKitBarcodeDecoder.setBarCodeFormat(barcodeFormat);
73+
previewView.setLayoutParams(new RelativeLayout.LayoutParams(WIDTH,HEIGHT));
74+
simpleDraweeView.setLayoutParams(new RelativeLayout.LayoutParams(WIDTH,HEIGHT));
75+
mlKitBarcodeDecoder.stopAll();
5376
mlKitBarcodeDecoder.startCamera();
5477

5578
}
5679

80+
@Override
81+
public void onDestroy() {
82+
super.onDestroy();
83+
Log.e(TAG, "onDestroy: ....");
84+
// mlKitBarcodeDecoder.stopAll();
85+
}
86+
87+
@Override
88+
public void onDetach() {
89+
super.onDetach();
90+
Log.e(TAG, "onDetach: ....");
91+
// mlKitBarcodeDecoder.stopAll();
92+
}
93+
94+
public void updatePreviewSize(int width, int height){
95+
Log.e(TAG, "updatePreviewSize: ");
96+
WIDTH = width;
97+
HEIGHT = height;
98+
99+
// if(previewView != null){
100+
// if(mlKitBarcodeDecoder != null){
101+
// mlKitBarcodeDecoder.stopAll();
102+
// mlKitBarcodeDecoder.startCamera();
103+
// }
104+
// previewView.setLayoutParams(new RelativeLayout.LayoutParams(width,height));
105+
// }
106+
}
107+
57108
}

android/src/main/java/com/reactnativemlkitbarcode/MlkitBarcodeViewManager.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import androidx.annotation.Nullable;
1313
import androidx.fragment.app.FragmentActivity;
1414

15+
import com.facebook.drawee.backends.pipeline.Fresco;
1516
import com.facebook.react.bridge.ReadableArray;
1617
import com.facebook.react.uimanager.ThemedReactContext;
1718
import com.facebook.react.uimanager.ViewGroupManager;
@@ -28,6 +29,9 @@ public class MlkitBarcodeViewManager extends ViewGroupManager<FrameLayout> {
2829
private MlKitBarcodeFragment scannerFrag;
2930
private ThemedReactContext reactContext;
3031

32+
private int WIDTH = 0;
33+
private int HEIGHT = 0;
34+
3135
private int barcodeFormat = 0;
3236

3337
@Override
@@ -45,6 +49,7 @@ public MlkitBarcodeViewManager() {
4549
public FrameLayout createViewInstance(ThemedReactContext reactContext) {
4650
this.reactContext = reactContext;
4751
FrameLayout frameLayout = new FrameLayout(reactContext);
52+
Fresco.initialize(reactContext);
4853
return frameLayout;
4954
}
5055

@@ -66,15 +71,33 @@ public void receiveCommand(@NonNull FrameLayout root, String commandId, @Nullabl
6671

6772
@ReactProp(name="barcodeFormat")
6873
public void setBarcodeFormat( View view,int barcodeFormat){
69-
// Log.e(TAG, "setBarcodeFormat: "+ barcodeFormat);
7074
this.barcodeFormat = barcodeFormat;
7175
}
7276

77+
@ReactProp(name = "height")
78+
public void setHeight(View view, int height) {
79+
Log.e(TAG, "setHeight: "+height);
80+
HEIGHT = height;
81+
if(scannerFrag != null)
82+
scannerFrag.updatePreviewSize(WIDTH,HEIGHT);
83+
}
84+
85+
@ReactProp(name = "width")
86+
public void setWidth(View view, int width) {
87+
Log.e(TAG, "setWidth: "+width);
88+
WIDTH = width;
89+
if(scannerFrag != null)
90+
scannerFrag.updatePreviewSize(WIDTH,HEIGHT);
91+
}
92+
93+
7394

7495
public void createFragment(FrameLayout root, int reactNativeViewId) {
96+
Log.e(TAG, "createFragment:...");
7597
ViewGroup parentView = (ViewGroup) root.findViewById(reactNativeViewId);
7698
this.setupLayout(parentView);
7799
this.scannerFrag = new MlKitBarcodeFragment(reactContext, barcodeFormat);
100+
this.scannerFrag.updatePreviewSize(WIDTH,HEIGHT);
78101
FragmentActivity activity = (FragmentActivity) this.reactContext.getCurrentActivity();
79102
activity.getSupportFragmentManager()
80103
.beginTransaction()
690 KB
Loading
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
3+
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
4+
xmlns:fresco="http://schemas.android.com/apk/res-auto"
5+
android:orientation="vertical"
6+
android:layout_width="wrap_content"
7+
android:layout_height="wrap_content"
8+
android:layout_gravity="center"
9+
>
10+
11+
<androidx.camera.view.PreviewView
12+
android:id="@+id/previewView"
13+
android:layout_width="200dp"
14+
android:layout_height="200dp"
15+
android:scaleType="fitCenter"
16+
/>
17+
18+
19+
<com.facebook.drawee.view.SimpleDraweeView
20+
android:id="@+id/imgViewGif"
21+
android:layout_width="100dp"
22+
android:layout_height="100dp"
23+
android:scaleType="fitCenter"
24+
/>
25+
26+
27+
28+
</RelativeLayout>
29+
30+
31+
<!-- fresco:backgroundImage="@color/colorRed"-->

example/src/App.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export default class App extends React.Component {
2121
return (
2222
<SafeAreaView style={{flex:1}}>
2323
<MlkitBarcodeView
24+
style={{width:800, height:800}}
2425
enableQrScanner={this.state.enableQrScanner}
2526
barcodeFormat={BARCODE.FORMAT_ALL_FORMATS}
2627
onSuccess={(data) => {

package-lock.json

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

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-native-mlkit-barcode",
3-
"version": "0.1.9",
3+
"version": "0.1.10",
44
"description": "test",
55
"main": "lib/commonjs/index",
66
"module": "lib/module/index",

src/MlkitBarcodeViewManager.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
requireNativeComponent,
33
UIManager,
44
Platform,
5+
ViewStyle,
56
} from 'react-native';
67
import PropTypes from 'prop-types';
78

@@ -13,6 +14,7 @@ const LINKING_ERROR =
1314

1415
MlkitBarcodeProps = {
1516
barcodeFormat: PropTypes.number,
17+
style: ViewStyle
1618
};
1719

1820
const ComponentName = 'MlkitBarcodeViewManager';

0 commit comments

Comments
 (0)