CameraViewLayout.java 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package com.wonderkiln.camerakit.base;
  2. import android.content.Context;
  3. import android.util.AttributeSet;
  4. import android.view.GestureDetector;
  5. import android.view.MotionEvent;
  6. import android.view.ScaleGestureDetector;
  7. import android.widget.FrameLayout;
  8. import androidx.annotation.NonNull;
  9. import androidx.annotation.Nullable;
  10. public abstract class CameraViewLayout extends FrameLayout {
  11. private ScaleGestureDetector scaleGestureDetector;
  12. private GestureDetector gestureDetector;
  13. public CameraViewLayout(@NonNull Context context) {
  14. this(context, null);
  15. }
  16. public CameraViewLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
  17. this(context, attrs, 0);
  18. }
  19. public CameraViewLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
  20. super(context, attrs, defStyleAttr);
  21. gestureDetector = new GestureDetector(context, onGestureListener);
  22. scaleGestureDetector = new ScaleGestureDetector(context, onScaleGestureListener);
  23. }
  24. @Override
  25. public boolean onTouchEvent(MotionEvent event) {
  26. gestureDetector.onTouchEvent(event);
  27. scaleGestureDetector.onTouchEvent(event);
  28. return true;
  29. }
  30. @Override
  31. public boolean onInterceptTouchEvent(MotionEvent ev) {
  32. return true;
  33. }
  34. protected abstract CameraImpl getCameraImpl();
  35. protected abstract PreviewImpl getPreviewImpl();
  36. protected abstract void onZoom(float zoom, boolean start);
  37. protected abstract void onTapToFocus(float x, float y);
  38. protected abstract void onToggleFacing();
  39. private GestureDetector.SimpleOnGestureListener onGestureListener = new GestureDetector.SimpleOnGestureListener() {
  40. @Override
  41. public boolean onDoubleTap(MotionEvent e) {
  42. onToggleFacing();
  43. return super.onDoubleTap(e);
  44. }
  45. @Override
  46. public boolean onSingleTapConfirmed(MotionEvent e) {
  47. onTapToFocus(e.getX() / (float) getWidth(), e.getY() / (float) getHeight());
  48. return super.onSingleTapConfirmed(e);
  49. }
  50. };
  51. private ScaleGestureDetector.OnScaleGestureListener onScaleGestureListener = new ScaleGestureDetector.OnScaleGestureListener() {
  52. @Override
  53. public boolean onScale(ScaleGestureDetector scaleGestureDetector) {
  54. onZoom(scaleGestureDetector.getScaleFactor(), false);
  55. return true;
  56. }
  57. @Override
  58. public boolean onScaleBegin(ScaleGestureDetector scaleGestureDetector) {
  59. onZoom(scaleGestureDetector.getScaleFactor(), true);
  60. return true;
  61. }
  62. @Override
  63. public void onScaleEnd(ScaleGestureDetector scaleGestureDetector) {
  64. }
  65. };
  66. }