2013-05-10 2 views
2

이 주제에 대한 몇 가지 다른 질문을 보았지만 아무 것도 내 문제를 해결하지 못했습니다. 확대/축소 버튼을 제외한 모든 기능이 제대로 작동하는 맞춤형 카메라 앱이 있습니다. setColorEffect는 옵션 메뉴에서 오는 완벽하게 작동합니다Android 맞춤형 카메라 줌이 작동하지 않음

@Override 
     public void surfaceChanged(SurfaceHolder holder, int format, int width, 
       int height) { 
      if (isPreviewing){ 
       camera.stopPreview(); 
      } 

      Camera.Parameters p = camera.getParameters(); 
      p.setPreviewSize(sizes.get(0).width, sizes.get(0).height); 
      p.setColorEffect(effect); 

      zoomControls = (ZoomControls) findViewById(R.id.zoomControls); 

      if (p.isZoomSupported()) { 
       maxZoomLevel = p.getMaxZoom(); 
       Toast.makeText(PictureTaker.this, String.valueOf(maxZoomLevel),Toast.LENGTH_LONG).show(); 
       zoomControls.setIsZoomInEnabled(true); 
       zoomControls.setIsZoomOutEnabled(true); 

       zoomControls.setOnZoomInClickListener(new OnClickListener() { 
        public void onClick(View v) { 
         if (currentZoomLevel < maxZoomLevel) { 
          currentZoomLevel++; 
          camera.startSmoothZoom(currentZoomLevel); 
          //Toast.makeText(PictureTaker.this, String.valueOf(currentZoomLevel),Toast.LENGTH_LONG).show(); 
         } 
        } 
       }); 

       zoomControls.setOnZoomOutClickListener(new OnClickListener() { 
        public void onClick(View v) { 
         if (currentZoomLevel > 0) { 
          currentZoomLevel--; 
          camera.startSmoothZoom(currentZoomLevel); 
         } 
        } 
       }); 
      } else { 
       zoomControls.setVisibility(View.GONE); 
      } 

      camera.setParameters(p); 

      try { 
       camera.setPreviewDisplay(holder); 
      } // end try 
      catch (IOException e) { 
       Log.v(TAG, e.toString()); 
      } // end catch 

      camera.startPreview(); // begin the preview 
      isPreviewing = true; 
     } 

:이 SDK 분 8 타겟 (14)를 사용하여 내 코드입니다. 코드가 실행될 때 토스트에 "59"가 표시되기 때문에 isZoomSupported 및 getMaxZoom이 작동하지만 줌 버튼에는 아무런 변화가 없습니다. 이것은 XML

<ZoomControls 
android:id="@+id/zoomControls" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true" 
android:layout_centerHorizontal="true" 
android:layout_marginBottom="17dp" 
android:baselineAligned="false" 
android:gravity="center_horizontal" 
android:orientation="horizontal" /> 

나는 모든 매니페스트에서 필요한 권한과 오류가 로그 캣에 표시되는 한에서 zoomControl입니다. 내가 뭘 잘못하고 있는지 모르겠다. 버튼을 눌렀을 때 currentZoomLevel이 변경되고 매번 값이 하나씩 증가하는 것을 보여 주면 두 번째 Toast를 추가하여보고합니다. 또한 startSmoothZoom를 사용하고 단지

p.setZoom(currentZoomLevel); or p.setZoomLevel(15); 

로 줌을 설정하고도 하나 하나 작동하지 했어요. 내 전화 인 HTC Incredible은 네이티브 카메라 앱을 완벽하게 작동시키는 줌 기능을 가지고 있습니다. 코드의 zoomControl 부분을 주석 처리하면 모든 것이 잘 작동하고 사용자 정의 카메라의 다른 모든 기능이 거기에있는 zoomControl 코드와 함께 제대로 작동하므로 그냥 확대/축소하지 마십시오.

답변

5

비슷한 문제를 겪고있는 다른 사람들을 도울 수 있습니다. 그것은 smoothzoom이었다. 내 HTC가 이걸 지원하지 않는 것 같아.

@Override 
     public void surfaceChanged(SurfaceHolder holder, int format, int width, 
       int height) { 
      if (isPreviewing){ 
       camera.stopPreview(); 
      } 

      p = camera.getParameters(); 
      p.setPreviewSize(sizes.get(0).width, sizes.get(0).height); 
      p.setColorEffect(effect); 



      if (p.isZoomSupported() && p.isSmoothZoomSupported()) { 
       //most phones 
       maxZoomLevel = p.getMaxZoom(); 

       zoomControls.setIsZoomInEnabled(true); 
       zoomControls.setIsZoomOutEnabled(true); 

       zoomControls.setOnZoomInClickListener(new OnClickListener() { 
        public void onClick(View v) { 
         if (currentZoomLevel < maxZoomLevel) { 
          currentZoomLevel++; 
          camera.startSmoothZoom(currentZoomLevel); 

         } 
        } 
       }); 

       zoomControls.setOnZoomOutClickListener(new OnClickListener() { 
        public void onClick(View v) { 
         if (currentZoomLevel > 0) { 
          currentZoomLevel--; 
          camera.startSmoothZoom(currentZoomLevel); 
         } 
        } 
       }); 
      } else if (p.isZoomSupported() && !p.isSmoothZoomSupported()){ 
       //stupid HTC phones 
       maxZoomLevel = p.getMaxZoom(); 

       zoomControls.setIsZoomInEnabled(true); 
       zoomControls.setIsZoomOutEnabled(true); 

       zoomControls.setOnZoomInClickListener(new OnClickListener() { 
        public void onClick(View v) { 
         if (currentZoomLevel < maxZoomLevel) { 
          currentZoomLevel++; 
          p.setZoom(currentZoomLevel); 
          camera.setParameters(p); 

         } 
        } 
       }); 

       zoomControls.setOnZoomOutClickListener(new OnClickListener() { 
        public void onClick(View v) { 
         if (currentZoomLevel > 0) { 
          currentZoomLevel--; 
          p.setZoom(currentZoomLevel); 
          camera.setParameters(p); 
         } 
        } 
       }); 
      }else{ 
       //no zoom on phone 
       zoomControls.setVisibility(View.GONE); 
      } 

      camera.setParameters(p); 

      try { 
       camera.setPreviewDisplay(holder); 
      } // end try 
      catch (IOException e) { 
       Log.v(TAG, e.toString()); 
      } // end catch 

      camera.startPreview(); // begin the preview 
      isPreviewing = true; 
     } // end method surfaceChanged 

이렇게하면 내 HTC가 단계적으로 확대됩니다. 버튼은 각 버튼을 클릭 한 후 카메라의 매개 변수를 설정하는 것이 었습니다. maxZoomLevel (내 HTC는 59이지만 내 Droid 4는 15에 불과 함)을 기반으로 원하는 수만큼 currentZoomLevel을 설정할 수 있습니다. ZoomControls를 클릭하는 동안 장치를 빠르게 확대/축소 할 수 있습니다. 이 코드를 작성하는 좀 더 세련된 방법 일 수도 있습니다. 아마도 maxZoomSize가 NULL 또는 무언가를 반환하지는 않는지 확인해야하지만 여러 장치에서 작동하고 있습니다.

+0

안녕하세요 u는 나를 도울 수, 메신저는 나를 위해 작동하지 않는이 코드를 사용하여 –

+0

는에 란 널 포인터 예외를 제공 내 HTC와 같은 문제. 게시 해 주셔서 감사합니다. – Zac

+0

삼성에서도 i는 똑같은 Prob에 직면했다. 감사합니다 그 시간을 절약했습니다 –

0

params.setZoom (currentZoomLevel); camera.setParameters (params); 코드는 내 삼성 G3 휴대 전화에서도 작동합니다.

1

그것의 간단한 startSmoothZoom 잊어() 메소드

이 따르

Camera.Parameters params = camera.getParameters(); 
params.setZoom(zoom_value); 
camera.setParameters(params); 
+0

이 대답에 대해 자세히 설명해 주시겠습니까? –

+0

startSmoothZoom (current_zoom ++) 대신 params.setZoom (current_zoom ++)을 사용하십시오. –

관련 문제