1

하드 코딩 된 UI를 레이아웃 XML 파일로 다시 작성할 수 있습니까?하드 코딩 된 UI를 레이아웃 XML로 다시 작성하는 방법은 무엇입니까?

현재 onCreate()은 다음과 같습니다

public class ViewfinderEE368 extends Activity {  
    private Preview mPreview; 
    private DrawOnTop mDrawOnTop; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Hide the window title. 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     // Create our Preview view and set it as the content of our activity. 
     // Create our DrawOnTop view. 
     mDrawOnTop = new DrawOnTop(this); 
     mPreview = new Preview(this, mDrawOnTop); 
     setContentView(mPreview); 
     addContentView(mDrawOnTop, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    } 
} 

내가 교체 할 때 :와

setContentView(mPreview); 
addContentView(mDrawOnTop, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

:

setContentView(R.layout.main); 
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); 
preview.addView(mPreview); 

이 응용 프로그램 충돌. mPreview = new Preview(this, mDrawOnTop) 호출

미리보기 기능은 다음과 같습니다

class Preview extends SurfaceView implements SurfaceHolder.Callback { 
    SurfaceHolder mHolder; 
    Camera mCamera; 
    DrawOnTop mDrawOnTop; 
    boolean mFinished; 

    Preview(Context context, DrawOnTop drawOnTop) { 
     super(context); 

     mDrawOnTop = drawOnTop; 
     mFinished = false; 

     // Install a SurfaceHolder.Callback so we get notified when the 
     // underlying surface is created and destroyed. 
     mHolder = getHolder(); 
     mHolder.addCallback(this); 
     mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    public void surfaceCreated(SurfaceHolder holder) { 
     mCamera = Camera.open(); 
     try { 
      mCamera.setPreviewDisplay(holder); 

      // Preview callback used whenever new viewfinder frame is available 
      mCamera.setPreviewCallback(new PreviewCallback() { 
       public void onPreviewFrame(byte[] data, Camera camera) 
       { 
        if ((mDrawOnTop == null) || mFinished) 
         return; 

        if (mDrawOnTop.mBitmap == null) 
        { 
         // Initialize the draw-on-top companion 
         Camera.Parameters params = camera.getParameters(); 
         mDrawOnTop.mImageWidth = params.getPreviewSize().width; 
         mDrawOnTop.mImageHeight = params.getPreviewSize().height; 
         mDrawOnTop.mBitmap = Bitmap.createBitmap(mDrawOnTop.mImageWidth, 
           mDrawOnTop.mImageHeight, Bitmap.Config.RGB_565); 
         mDrawOnTop.mRGBData = new int[mDrawOnTop.mImageWidth * mDrawOnTop.mImageHeight]; 
         mDrawOnTop.mYUVData = new byte[data.length];      
        } 

        // Pass YUV data to draw-on-top companion 
        System.arraycopy(data, 0, mDrawOnTop.mYUVData, 0, data.length); 
        mDrawOnTop.invalidate(); 
       } 
      }); 

      Camera.Parameters parameters = mCamera.getParameters(); 
      Log.v("TAG", "getPictureFormat: "+parameters.getPictureFormat()); 
      Log.v("TAG", "getPreviewFormat: "+parameters.getPreviewFormat()); 

      android.hardware.Camera.Size previewSize = parameters.getPreviewSize(); 
      Log.v("TAG", "getPreviewSize: H="+previewSize.height+" W="+previewSize.width); 

      android.hardware.Camera.Size pictureSize = parameters.getPictureSize(); 
      Log.v("TAG", "getPictureSize: H="+pictureSize.height+" W="+pictureSize.width); 

      android.hardware.Camera.Size JPEGThumbSize = parameters.getJpegThumbnailSize(); 
      Log.v("TAG", "getJpegThumbnailSize: H="+JPEGThumbSize.height +" W="+JPEGThumbSize.width); 

     } 
     catch (IOException exception) { 
      mCamera.release(); 
      mCamera = null; 
     } 
    } 

    public void surfaceDestroyed(SurfaceHolder holder) { 
     // Surface will be destroyed when we return, so stop the preview. 
     // Because the CameraDevice object is not a shared resource, it's very 
     // important to release it when the activity is paused. 
     mFinished = true; 
     mCamera.setPreviewCallback(null); 
     mCamera.stopPreview(); 
     mCamera.release(); 
     mCamera = null; 
    } 

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
     // Now that the size is known, set up the camera parameters and begin 
     // the preview. 
     Camera.Parameters parameters = mCamera.getParameters(); 
     parameters.setPreviewSize(320, 240); 
     parameters.setPreviewFrameRate(15); 
     parameters.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO); 
     parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); 
     mCamera.setParameters(parameters); 
     mCamera.startPreview(); 

    } 

} 

에서 나는 소스 코드를 사용하고 있습니다 : http://www.stanford.edu/class/ee368/Android/ViewfinderEE368/

로그 캣 출력은 다음과 같습니다 :

그것은처럼 보이는
01-17 20:09:43.865: D/AndroidRuntime(16033): Shutting down VM 
01-17 20:09:43.885: W/dalvikvm(16033): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
01-17 20:09:43.885: E/AndroidRuntime(16033): FATAL EXCEPTION: main 
01-17 20:09:43.885: E/AndroidRuntime(16033): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.viewfinderee368/com.example.viewfinderee368.ViewfinderEE368}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content 
01-17 20:09:43.885: E/AndroidRuntime(16033): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at android.os.Looper.loop(Looper.java:130) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at android.app.ActivityThread.main(ActivityThread.java:3683) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at java.lang.reflect.Method.invokeNative(Native Method) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at java.lang.reflect.Method.invoke(Method.java:507) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at dalvik.system.NativeStart.main(Native Method) 
01-17 20:09:43.885: E/AndroidRuntime(16033): Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content 
01-17 20:09:43.885: E/AndroidRuntime(16033): at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:181) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at android.app.Activity.requestWindowFeature(Activity.java:2729) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at com.example.viewfinderee368.ViewfinderEE368.onCreate(ViewfinderEE368.java:55) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
01-17 20:09:43.885: E/AndroidRuntime(16033): ... 11 more 
+0

당신의 로그 캣 출력은 무엇인가? 예외는 무엇입니까? –

+0

"mPreview = new CameraPreview ..."를 시작하는 코드 줄이 유효한 Java로 보이지 않습니다. – user467257

+0

Sergey, LogCat 출력으로 내 메인 포스트를 업데이트했습니다. – balkis

답변

0

귀하의 오류는 실제로 발생했습니다

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 

귀하의 logcat. 즉

Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content 
01-17 20:09:43.885: E/AndroidRuntime(16033): at  com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:181) 
01-17 20:09:43.885: E/AndroidRuntime(16033): at android.app.Activity.requestWindowFeature(Activity.java:2729) 

에 한번이 코드를 제거하고의 활동 태그에

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" 

로 대체 매니페스트

+0

감사합니다.이 도움이되었습니다. :) – balkis

관련 문제