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/

LogCat出力は以下の通りです:

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

のアクティビティタグで、このコードを削除し、

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

とそれを交換してみてください例外は何ですか? –

+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) 

あなたのlogcat出力は何ですか?あなたのマニフェスト

+0

ありがとう、これは私を助けました:) – balkis

関連する問題