10
10
import android .content .res .Resources ;
11
11
import android .graphics .Bitmap ;
12
12
import android .graphics .Color ;
13
+ import android .graphics .SurfaceTexture ;
13
14
import android .hardware .Camera ;
14
15
import android .media .AudioManager ;
15
16
import android .media .MediaPlayer ;
18
19
import android .util .DisplayMetrics ;
19
20
import android .util .Log ;
20
21
import android .view .MotionEvent ;
21
- import android .view .SurfaceHolder ;
22
- import android .view .SurfaceView ;
22
+ import android .view .TextureView ;
23
23
import android .view .View ;
24
24
import android .view .ViewGroup ;
25
25
import android .widget .FrameLayout ;
38
38
import java .util .Vector ;
39
39
40
40
41
- public class CaptureView extends FrameLayout implements SurfaceHolder . Callback {
41
+ public class CaptureView extends FrameLayout implements TextureView . SurfaceTextureListener {
42
42
43
43
44
44
private CaptureActivityHandler handler ;
@@ -54,7 +54,7 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
54
54
private Activity activity ;
55
55
private ViewGroup .LayoutParams param ;
56
56
private int ScreenWidth , ScreenHeight ;
57
- private SurfaceView surfaceView ;
57
+ private TextureView textureView ;
58
58
private long beginTime ;
59
59
private int height ;
60
60
private int width ;
@@ -95,7 +95,7 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
95
95
private View popupWindowContent ;
96
96
private PopupWindow popupWindow ;
97
97
private LinearGradientView linearGradientView ;
98
- SurfaceHolder holder ;
98
+ SurfaceTexture surfaceTexture ;
99
99
boolean autoStart = true ;//是否自动启动扫描
100
100
String ResultStr ="" ;
101
101
@@ -175,23 +175,6 @@ public Handler getHandler() {
175
175
return handler ;
176
176
}
177
177
178
- @ Override
179
- public void surfaceChanged (SurfaceHolder holder , int format , int width ,
180
- int height ) {
181
- }
182
-
183
- @ Override
184
- public void surfaceCreated (SurfaceHolder holder ) {
185
-
186
- // Log.i("Test", "height:" + height + "width:" + width);
187
- initCameraManager ();
188
- this .holder = holder ;
189
-
190
- if (autoStart ) {
191
- startScan ();
192
- }
193
-
194
- }
195
178
196
179
private void initCameraManager () {
197
180
@@ -215,24 +198,14 @@ public void onViewAdded(View child) {
215
198
this.addView(this.viewfinderView);
216
199
}
217
200
}*/
218
-
219
-
220
- @ Override
221
- public void surfaceDestroyed (SurfaceHolder holder ) {
222
-
223
- stopScan ();
224
-
225
- }
226
-
201
+
227
202
/**
228
203
* Activity onResume后调用view的onAttachedToWindow
229
204
*/
230
205
@ Override
231
206
protected void onAttachedToWindow () {
232
207
init ();
233
208
super .onAttachedToWindow ();
234
-
235
-
236
209
}
237
210
238
211
/**
@@ -242,18 +215,18 @@ private void init() {
242
215
if (mHandler == null ) {
243
216
mHandler = new Handler ();
244
217
}
245
- surfaceView = new SurfaceView (activity );
246
- surfaceView .setLayoutParams (param );
247
- surfaceView .getLayoutParams ().height = ScreenHeight ;
248
- surfaceView .getLayoutParams ().width = ScreenWidth ;
249
- SurfaceHolder surfaceHolder = surfaceView . getHolder ();
218
+ textureView = new TextureView (activity );
219
+ textureView .setLayoutParams (param );
220
+ textureView .getLayoutParams ().height = ScreenHeight ;
221
+ textureView .getLayoutParams ().width = ScreenWidth ;
222
+ SurfaceTexture surfaceTexture = textureView . getSurfaceTexture ();
250
223
if (hasSurface ) {
251
- initCamera (surfaceHolder );
224
+ initCamera (surfaceTexture );
252
225
} else {
253
- surfaceHolder . addCallback (this );
226
+ textureView . setSurfaceTextureListener (this );
254
227
255
228
}
256
- this .addView (surfaceView );
229
+ this .addView (textureView );
257
230
viewfinderView = new ViewfinderView (activity , scanTime , CORNER_COLOR );
258
231
viewfinderView .CORNER_WIDTH = CORNER_WIDTH ;
259
232
viewfinderView .ShowText = Text ;
@@ -388,7 +361,7 @@ public void startScan() {
388
361
viewfinderView .drawLine = true ;
389
362
hasSurface = true ;
390
363
CameraManager .get ().framingRectInPreview = null ;
391
- initCamera (holder );
364
+ initCamera (surfaceTexture );
392
365
393
366
CameraManager .get ().initPreviewCallback ();
394
367
CameraManager .get ().startPreview ();
@@ -427,10 +400,8 @@ public void startQR() {
427
400
@ Override
428
401
protected void onDetachedFromWindow () {
429
402
this .removeView (viewfinderView );
430
- this .removeView (surfaceView );
431
- // if(popupWindow.isShowing()){
432
- // popupWindow.dismiss();
433
- // }
403
+ this .removeView (textureView );
404
+
434
405
if (handler != null ) {
435
406
handler .quitSynchronously ();
436
407
}
@@ -439,9 +410,9 @@ protected void onDetachedFromWindow() {
439
410
}
440
411
441
412
442
- private void initCamera (SurfaceHolder surfaceHolder ) {
413
+ private void initCamera (SurfaceTexture surfaceTexture ) {
443
414
try {
444
- CameraManager .get ().openDriver (surfaceHolder );
415
+ CameraManager .get ().openDriver (surfaceTexture );
445
416
446
417
447
418
} catch (IOException ioe ) {
@@ -483,44 +454,12 @@ public void handleDecode(Result obj, Bitmap barcode) {
483
454
} catch (InterruptedException e) {
484
455
e.printStackTrace();
485
456
}
486
- initCamera(surfaceView .getHolder());
457
+ initCamera(textureView .getHolder());
487
458
if (handler != null) {
488
459
handler.restartPreviewAndDecode();
489
460
}*/
490
461
491
462
}
492
- /* public Handler Scanhandler=new Handler() {
493
- @Override
494
- public void handleMessage(Message msg) {
495
- // TODO Auto-generated method stub
496
- super.handleMessage(msg);
497
- // 此处可以更新UI
498
- Bundle b = msg.getData();
499
- String result = b.getString("result");
500
- onEvChangeListener.getQRCodeResult(result); //观察者模式发送到RN侧
501
- }
502
- };//不加这个分号则不能自动添加代码
503
- */
504
- /* public void DecodeFromPath(final String path){
505
-
506
-
507
- Runnable scan_thread =new Runnable() {
508
- @Override
509
- public void run() {
510
- String ResultStr= DecodeUtil.getStringFromQRCode(path);
511
- Message msg = new Message();
512
- Bundle b = new Bundle();// 存放数据
513
- b.putString("result",ResultStr);
514
- msg.setData(b);
515
-
516
- Scanhandler.sendMessage(msg);
517
- }
518
- };
519
-
520
- Scanhandler.post(scan_thread);
521
-
522
-
523
- }*/
524
463
525
464
526
465
/**
@@ -687,7 +626,7 @@ public void onWindowFocusChanged(boolean hasWindowFocus) {
687
626
688
627
if (hasWindowFocus ) {
689
628
//对应onresume
690
- this .holder = surfaceView . getHolder ();
629
+ this .surfaceTexture = textureView . getSurfaceTexture ();
691
630
startScan ();
692
631
} else {
693
632
//对应onpause
@@ -844,7 +783,7 @@ public void onAnimationEnd(Animator animation) {
844
783
CameraManager .get ().framingRectInPreview = null ;
845
784
// decodeFormats = null;
846
785
viewfinderView .drawLine = true ;
847
- holder = surfaceView . getHolder ();
786
+ surfaceTexture = textureView . getSurfaceTexture ();
848
787
// startScan();
849
788
startQR ();
850
789
initProgressBar ();
@@ -855,7 +794,7 @@ public void onAnimationCancel(Animator animation) {
855
794
stopScan ();
856
795
CameraManager .get ().framingRectInPreview = null ;
857
796
// decodeFormats = null;
858
- holder = surfaceView . getHolder ();
797
+ surfaceTexture = textureView . getSurfaceTexture ();
859
798
startScan ();
860
799
viewfinderView .drawLine = true ;
861
800
}
@@ -873,6 +812,41 @@ public void onAnimationRepeat(Animator animation) {
873
812
874
813
}
875
814
815
+ @ Override
816
+ public void onSurfaceTextureAvailable (SurfaceTexture surface , int width , int height ) {
817
+ // Log.i("Test", "height:" + height + "width:" + width);
818
+
819
+ CameraManager .init (activity );
820
+
821
+ initCameraManager ();
822
+
823
+ surfaceTexture = surface ;
824
+
825
+
826
+ textureView .setAlpha (1.0f );
827
+
828
+
829
+ if (autoStart ) {
830
+ startScan ();
831
+ }
832
+ }
833
+
834
+ @ Override
835
+ public void onSurfaceTextureSizeChanged (SurfaceTexture surface , int width , int height ) {
836
+
837
+ }
838
+
839
+ @ Override
840
+ public boolean onSurfaceTextureDestroyed (SurfaceTexture surface ) {
841
+ stopScan ();
842
+ return false ;
843
+ }
844
+
845
+ @ Override
846
+ public void onSurfaceTextureUpdated (SurfaceTexture surface ) {
847
+
848
+ }
849
+
876
850
877
851
private final class TouchListener implements OnTouchListener {
878
852
0 commit comments