ハードコードされた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
のアクティビティタグで、このコードを削除し、
とそれを交換してみてください例外は何ですか? –
"mPreview = new CameraPreview ..."を開始するコード行は、有効なjavaのようには見えません。 – user467257
Sergey、LogCatの出力でメインポストを更新しました – balkis