android – 我/艺术:找不到类:

前端之家收集整理的这篇文章主要介绍了android – 我/艺术:找不到类:前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
你好,我是这种 Android Studio Error的新手.可能只是一个警告,但我一直面临着找不到课程的问题.

实际上我正在开发Android Camera API应用程序,问题是我的Front Facing Camera Preview是Stretch.它只发生在华为p8 lite等2-3个设备上.当切换到前置摄像头时,设备会拉伸摄像头预览!

我有相机预览类:

  1. public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
  2.  
  3. //Variables de' Preview
  4. private SurfaceHolder mHolder;
  5. private List<Camera.Size> mSupportedPreviewSizes;
  6. private Camera.Size mPreviewSize;
  7. private int FOCUS_AREA_SIZE=300;
  8. public static Camera previewCamera;
  9. ////////////////////////
  10.  
  11. //protected LOGGER keys
  12. protected final String EXCEPTION_KEY="xception";
  13. //////////////////////////
  14.  
  15. public CameraPreview(Context context,Camera camera) {
  16. super(context);
  17.  
  18. //get the camera
  19. previewCamera = camera;
  20.  
  21. if(previewCamera!=null){
  22. // supported preview sizes
  23. mSupportedPreviewSizes = previewCamera.getParameters().getSupportedPreviewSizes();
  24. }
  25. else{
  26. previewCamera=camera;
  27. // supported preview sizes
  28. mSupportedPreviewSizes = previewCamera.getParameters().getSupportedPreviewSizes();
  29. }
  30.  
  31. // Install a SurfaceHolder.Callback so we get notified when the
  32. // underlying surface is created and destroyed.
  33. mHolder = getHolder();
  34. mHolder.addCallback(this);
  35. // deprecated setting,but required on Android versions prior to 3.0
  36. mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  37. setKeepScreenOn(true);
  38. setPreview();
  39. }
  40.  
  41. @Override
  42. public void surfaceCreated(SurfaceHolder surfaceHolder) {
  43. try{
  44. //when the surface is created,we can set the camera to draw images in this surfaceholder
  45. setPreview();
  46.  
  47. previewCamera.setPreviewDisplay(surfaceHolder);
  48. previewCamera.startPreview();
  49.  
  50. if(CameraActivity.cameraId==1){
  51. previewCamera.setFaceDetectionListener(faceDetectionListener);
  52. previewCamera.startFaceDetection();
  53. }
  54. } catch(Exception exp){
  55. Log.i(EXCEPTION_KEY,"FROM surfaceCreated: "+exp.toString());
  56. }
  57. }
  58.  
  59. @Override
  60. public void surfaceChanged(SurfaceHolder surfaceHolder,int i,int i2,int i3) {
  61. //before changing the application orientation,you need to stop the preview,rotate and then start it again
  62.  
  63. if(mHolder.getSurface() == null)//check if the surface is ready to receive camera data
  64. return;
  65.  
  66. try{
  67. previewCamera.stopPreview();
  68. } catch (Exception e){
  69. //this will happen when you are trying the camera if it's not running
  70. }
  71.  
  72. //now,recreate the camera preview
  73. try{
  74. //set the camera preview on every preview change
  75. setPreview();
  76.  
  77. //in case the preview is still stretched bingo! Then...
  78.  
  79. // Camera.Parameters params = previewCamera.getParameters();
  80. // List<Camera.Size> sizes = params.getSupportedPreviewSizes();
  81. // Camera.Size optimalSize = PreviewSizeParameters.getOptimalPreviewSize(sizes,i2,i3);
  82. // params.setPreviewSize(optimalSize.width,optimalSize.height);
  83. // previewCamera.setParameters(params);
  84.  
  85. previewCamera.setPreviewDisplay(mHolder);
  86. previewCamera.startPreview();
  87.  
  88. if(CameraActivity.cameraId==1){
  89. previewCamera.setFaceDetectionListener(faceDetectionListener);
  90. previewCamera.startFaceDetection();
  91. }
  92. } catch(Exception exp){
  93. Log.i(EXCEPTION_KEY,"FROM surfaceChanged: "+exp.toString());
  94. }
  95. }
  96.  
  97. public void setPreview(){
  98. try{
  99. //set the focusable true
  100. this.setFocusable(true);
  101. //set the touch able true
  102. this.setFocusableInTouchMode(true);
  103. //set the camera display orientation lock
  104. previewCamera.setDisplayOrientation(90);
  105.  
  106. //get the camera parameters
  107. Camera.Parameters parameters = previewCamera.getParameters();
  108. //set the preview size
  109. parameters.setPreviewSize(mPreviewSize.width,mPreviewSize.height);
  110. //set the parameter
  111. previewCamera.setParameters(parameters);
  112. }catch(Exception exp){
  113. Log.i(EXCEPTION_KEY,"FROM setPreview: "+exp.toString());
  114. }
  115. }
  116.  
  117. @Override
  118. public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
  119. //our app has only one screen,so we'll destroy the camera in the surface
  120. //if you are using with more screens,please move this code your activity
  121. try{
  122. //handle in Activity onResume and onPause
  123. }catch(Exception exp){
  124. Log.i(EXCEPTION_KEY,"FROM surfaceDestroyed: "+exp.toString());
  125. }
  126. }
  127.  
  128. //Override Methods here
  129. @Override
  130. protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec) {
  131. try{
  132. final int width = resolveSize(getSuggestedMinimumWidth(),widthMeasureSpec);
  133. final int height = resolveSize(getSuggestedMinimumHeight(),heightMeasureSpec);
  134. setMeasuredDimension(width,height);
  135.  
  136. if (mSupportedPreviewSizes != null) {
  137. mPreviewSize = PreviewSizeParameters.getOptimalPreviewSize(mSupportedPreviewSizes,width,height);
  138. }
  139. }catch(Exception exp){
  140. Log.i(EXCEPTION_KEY,"FROM onMeasure: "+exp.toString());
  141. }
  142. }
  143. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  144.  
  145. private void stopPreviewAndFreeCamera() {
  146.  
  147. if (previewCamera != null) {
  148. // Call stopPreview() to stop updating the preview surface.
  149. previewCamera.stopPreview();
  150.  
  151. // Important: Call release() to release the camera for use by other
  152. // applications. Applications should release the camera immediately
  153. // during onPause() and re-open() it during onResume()).
  154. previewCamera.release();
  155.  
  156. previewCamera = null;
  157. }
  158. }
  159.  
  160.  
  161. //end of outer class here
  162. }

自从过去几天以来,我一直在解决这个问题,并在我的自定义相机预览中获得相同的拉伸效果.

所以我获得最佳预览尺寸的方法是:

  1. public class PreviewSizeParameters {
  2.  
  3. //protected LOGGER keys
  4. protected static final String EXCEPTION_KEY = "xception";
  5. //////////////////////////
  6.  
  7. public static Camera.Size getOptimalPreviewSize(List<Camera.Size> sizes,int w,int h) {
  8. final double ASPECT_TOLERANCE = 0.1;
  9. double targetRatio = (double) h / w;
  10.  
  11. if (sizes == null) return null;
  12.  
  13. Camera.Size optimalSize = null;
  14. double minDiff = Double.MAX_VALUE;
  15.  
  16. int targetHeight = h;
  17.  
  18. for (Camera.Size size : sizes) {
  19. double ratio = (double) size.width / size.height;
  20. if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue;
  21. if (Math.abs(size.height - targetHeight) < minDiff) {
  22. optimalSize = size;
  23. minDiff = Math.abs(size.height - targetHeight);
  24. }
  25. }
  26.  
  27. if (optimalSize == null) {
  28. minDiff = Double.MAX_VALUE;
  29. for (Camera.Size size : sizes) {
  30. if (Math.abs(size.height - targetHeight) < minDiff) {
  31. optimalSize = size;
  32. minDiff = Math.abs(size.height - targetHeight);
  33. }
  34. }
  35. }
  36. return optimalSize;
  37. }
  38. }

问题

问题是只在前置摄像头上拉伸摄像头预览.我的日志cat数据如下:

显示了一些行开头:I / art:找不到类:因为我是新手,所以我不知道它们是什么意思?

@H_502_21@

解决方法

确保将以下依赖项添加到应用程序build.gradle文件中.
  1. compile 'com.android.support:appcompat-v7:24.1.1'
  2. compile 'com.android.support:recyclerview-v7:24.1.1'

从屏幕截图中,可以在recyclerview支持库(DefaultItemAnimator和SimpleItemAnimator)中找到这些缺失的类.

@H_502_21@ @H_502_21@

猜你在找的Android相关文章