Commit a3db9361 authored by cyqresig's avatar cyqresig

replaced SurfaceView with TextureView

parent f59c84cb
...@@ -10,6 +10,7 @@ import android.content.res.AssetFileDescriptor; ...@@ -10,6 +10,7 @@ import android.content.res.AssetFileDescriptor;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.SurfaceTexture;
import android.hardware.Camera; import android.hardware.Camera;
import android.media.AudioManager; import android.media.AudioManager;
import android.media.MediaPlayer; import android.media.MediaPlayer;
...@@ -18,8 +19,7 @@ import android.os.Vibrator; ...@@ -18,8 +19,7 @@ import android.os.Vibrator;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.SurfaceHolder; import android.view.TextureView;
import android.view.SurfaceView;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.FrameLayout; import android.widget.FrameLayout;
...@@ -38,7 +38,7 @@ import java.util.List; ...@@ -38,7 +38,7 @@ import java.util.List;
import java.util.Vector; import java.util.Vector;
public class CaptureView extends FrameLayout implements SurfaceHolder.Callback { public class CaptureView extends FrameLayout implements TextureView.SurfaceTextureListener {
private CaptureActivityHandler handler; private CaptureActivityHandler handler;
...@@ -54,7 +54,7 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback { ...@@ -54,7 +54,7 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
private Activity activity; private Activity activity;
private ViewGroup.LayoutParams param; private ViewGroup.LayoutParams param;
private int ScreenWidth, ScreenHeight; private int ScreenWidth, ScreenHeight;
private SurfaceView surfaceView; private TextureView textureView;
private long beginTime; private long beginTime;
private int height; private int height;
private int width; private int width;
...@@ -95,7 +95,7 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback { ...@@ -95,7 +95,7 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
private View popupWindowContent; private View popupWindowContent;
private PopupWindow popupWindow; private PopupWindow popupWindow;
private LinearGradientView linearGradientView; private LinearGradientView linearGradientView;
SurfaceHolder holder; SurfaceTexture surfaceTexture;
boolean autoStart = true;//是否自动启动扫描 boolean autoStart = true;//是否自动启动扫描
String ResultStr=""; String ResultStr="";
...@@ -175,23 +175,6 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback { ...@@ -175,23 +175,6 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
return handler; return handler;
} }
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// Log.i("Test", "height:" + height + "width:" + width);
initCameraManager();
this.holder = holder;
if (autoStart) {
startScan();
}
}
private void initCameraManager() { private void initCameraManager() {
...@@ -216,14 +199,6 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback { ...@@ -216,14 +199,6 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
} }
}*/ }*/
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
stopScan();
}
/** /**
* Activity onResume后调用view的onAttachedToWindow * Activity onResume后调用view的onAttachedToWindow
*/ */
...@@ -231,8 +206,6 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback { ...@@ -231,8 +206,6 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
protected void onAttachedToWindow() { protected void onAttachedToWindow() {
init(); init();
super.onAttachedToWindow(); super.onAttachedToWindow();
} }
/** /**
...@@ -242,18 +215,18 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback { ...@@ -242,18 +215,18 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
if (mHandler == null) { if (mHandler == null) {
mHandler = new Handler(); mHandler = new Handler();
} }
surfaceView = new SurfaceView(activity); textureView = new TextureView(activity);
surfaceView.setLayoutParams(param); textureView.setLayoutParams(param);
surfaceView.getLayoutParams().height = ScreenHeight; textureView.getLayoutParams().height = ScreenHeight;
surfaceView.getLayoutParams().width = ScreenWidth; textureView.getLayoutParams().width = ScreenWidth;
SurfaceHolder surfaceHolder = surfaceView.getHolder(); SurfaceTexture surfaceTexture = textureView.getSurfaceTexture();
if (hasSurface) { if (hasSurface) {
initCamera(surfaceHolder); initCamera(surfaceTexture);
} else { } else {
surfaceHolder.addCallback(this); textureView.setSurfaceTextureListener(this);
} }
this.addView(surfaceView); this.addView(textureView);
viewfinderView = new ViewfinderView(activity, scanTime, CORNER_COLOR); viewfinderView = new ViewfinderView(activity, scanTime, CORNER_COLOR);
viewfinderView.CORNER_WIDTH = CORNER_WIDTH; viewfinderView.CORNER_WIDTH = CORNER_WIDTH;
viewfinderView.ShowText = Text; viewfinderView.ShowText = Text;
...@@ -388,7 +361,7 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback { ...@@ -388,7 +361,7 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
viewfinderView.drawLine = true; viewfinderView.drawLine = true;
hasSurface = true; hasSurface = true;
CameraManager.get().framingRectInPreview = null; CameraManager.get().framingRectInPreview = null;
initCamera(holder); initCamera(surfaceTexture);
CameraManager.get().initPreviewCallback(); CameraManager.get().initPreviewCallback();
CameraManager.get().startPreview(); CameraManager.get().startPreview();
...@@ -427,10 +400,8 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback { ...@@ -427,10 +400,8 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
@Override @Override
protected void onDetachedFromWindow() { protected void onDetachedFromWindow() {
this.removeView(viewfinderView); this.removeView(viewfinderView);
this.removeView(surfaceView); this.removeView(textureView);
// if(popupWindow.isShowing()){
// popupWindow.dismiss();
// }
if (handler != null) { if (handler != null) {
handler.quitSynchronously(); handler.quitSynchronously();
} }
...@@ -439,9 +410,9 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback { ...@@ -439,9 +410,9 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
} }
private void initCamera(SurfaceHolder surfaceHolder) { private void initCamera(SurfaceTexture surfaceTexture) {
try { try {
CameraManager.get().openDriver(surfaceHolder); CameraManager.get().openDriver(surfaceTexture);
} catch (IOException ioe) { } catch (IOException ioe) {
...@@ -483,44 +454,12 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback { ...@@ -483,44 +454,12 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
initCamera(surfaceView.getHolder()); initCamera(textureView.getHolder());
if (handler != null) { if (handler != null) {
handler.restartPreviewAndDecode(); handler.restartPreviewAndDecode();
}*/ }*/
} }
/* public Handler Scanhandler=new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
// 此处可以更新UI
Bundle b = msg.getData();
String result = b.getString("result");
onEvChangeListener.getQRCodeResult(result); //观察者模式发送到RN侧
}
};//不加这个分号则不能自动添加代码
*/
/* public void DecodeFromPath(final String path){
Runnable scan_thread =new Runnable() {
@Override
public void run() {
String ResultStr= DecodeUtil.getStringFromQRCode(path);
Message msg = new Message();
Bundle b = new Bundle();// 存放数据
b.putString("result",ResultStr);
msg.setData(b);
Scanhandler.sendMessage(msg);
}
};
Scanhandler.post(scan_thread);
}*/
/** /**
...@@ -687,7 +626,7 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback { ...@@ -687,7 +626,7 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
if (hasWindowFocus) { if (hasWindowFocus) {
//对应onresume //对应onresume
this.holder = surfaceView.getHolder(); this.surfaceTexture = textureView.getSurfaceTexture();
startScan(); startScan();
} else { } else {
//对应onpause //对应onpause
...@@ -844,7 +783,7 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback { ...@@ -844,7 +783,7 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
CameraManager.get().framingRectInPreview = null; CameraManager.get().framingRectInPreview = null;
// decodeFormats = null; // decodeFormats = null;
viewfinderView.drawLine = true; viewfinderView.drawLine = true;
holder = surfaceView.getHolder(); surfaceTexture = textureView.getSurfaceTexture();
// startScan(); // startScan();
startQR(); startQR();
initProgressBar(); initProgressBar();
...@@ -855,7 +794,7 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback { ...@@ -855,7 +794,7 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
stopScan(); stopScan();
CameraManager.get().framingRectInPreview = null; CameraManager.get().framingRectInPreview = null;
// decodeFormats = null; // decodeFormats = null;
holder = surfaceView.getHolder(); surfaceTexture = textureView.getSurfaceTexture();
startScan(); startScan();
viewfinderView.drawLine = true; viewfinderView.drawLine = true;
} }
...@@ -873,6 +812,41 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback { ...@@ -873,6 +812,41 @@ public class CaptureView extends FrameLayout implements SurfaceHolder.Callback {
} }
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
// Log.i("Test", "height:" + height + "width:" + width);
CameraManager.init(activity);
initCameraManager();
surfaceTexture = surface;
textureView.setAlpha(1.0f);
if (autoStart) {
startScan();
}
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
stopScan();
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
private final class TouchListener implements OnTouchListener { private final class TouchListener implements OnTouchListener {
......
...@@ -24,7 +24,7 @@ import android.hardware.Camera; ...@@ -24,7 +24,7 @@ import android.hardware.Camera;
import android.os.Build; import android.os.Build;
import android.os.Handler; import android.os.Handler;
import android.util.Log; import android.util.Log;
import android.view.SurfaceHolder; import android.graphics.SurfaceTexture;
import java.io.IOException; import java.io.IOException;
...@@ -133,16 +133,16 @@ private final Context context; ...@@ -133,16 +133,16 @@ private final Context context;
/** /**
* Opens the camera driver and initializes the hardware parameters. * Opens the camera driver and initializes the hardware parameters.
* *
* @param holder The surface object which the camera will draw preview frames into. * @param surfaceTexture The surface object which the camera will draw preview frames into.
* @throws IOException Indicates the camera driver failed to open. * @throws IOException Indicates the camera driver failed to open.
*/ */
public void openDriver(SurfaceHolder holder) throws IOException { public void openDriver(SurfaceTexture surfaceTexture) throws IOException {
if (camera == null) { if (camera == null) {
camera = Camera.open(); camera = Camera.open();
if (camera == null) { if (camera == null) {
throw new IOException(); throw new IOException();
} }
camera.setPreviewDisplay(holder); camera.setPreviewTexture(surfaceTexture);
if (!initialized) { if (!initialized) {
initialized = true; initialized = true;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment