2015-01-12 2 views
1

주 활동에서 카메라를 열려고해도 계속 오류가 발생합니다. 내가 무엇을 잘못 설정했는지 모르겠다. java.lang.IllegalArgumentException : id에 대한 뷰를 찾을 수 없다. 이 문제를 해결할 수있는 방법이 있으면 감사하겠습니다.조각에 대한 id가 발견되지 않았습니다.

MainActivity. Java 


public class MainActivity extends Activity { 

private static final int SELECT_PICTURE = 0; 
private static final int IMAGE_CAPTURE = 1; 

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

    boolean titled = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
    setContentView(R.layout.activity_main); 
    if(titled){ 
     getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_bar_main); 
    } 

    ((ImageButton) findViewById(R.id.button1)) 
      .setOnClickListener(new View.OnClickListener() { 
       public void onClick(View arg0) { 

        // in onCreate or any event where your want the user to 
        // select a file 
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
        intent.setType("image/*"); 
        intent.setAction(Intent.ACTION_GET_CONTENT); 

        //check if there is app to receive intent 
        PackageManager packageManager = getPackageManager(); 
        List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0); 
        @SuppressWarnings("unused") 
        boolean isIntentSafe = activities.size() > 0; 

        startActivityForResult(Intent.createChooser(intent, 
          "Select Picture"), SELECT_PICTURE); 
       } 
      }); 

    ((ImageButton) findViewById(R.id.button2)) 
      .setOnClickListener(new View.OnClickListener() { 
       public void onClick(View arg0) { 
        getFragmentManager().beginTransaction() 
          .replace(R.id.container, Camera2BasicFragment.newInstance()) 
          .commit(); 
       } 
      }); 
} 


public void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_PICTURE) { 
      Uri selectedImageUri = data.getData(); 
      Intent intent = new Intent(this, EditImage.class); 
      intent.setType("/*image"); 
      intent.setData(selectedImageUri); 
      intent.putExtra("EditMode", false); 
      startActivity(intent); 
     } 
     else if (requestCode == IMAGE_CAPTURE) 
     { 
      //File dir = Environment .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); 
      //File output = new File(dir, "camerascript.png"); 
      //String cPath = output.getAbsolutePath(); 
      Intent Camera2BasicFragment = new Intent(this, EditImage.class); 
      Camera2BasicFragment.setType("/*image"); 
      Camera2BasicFragment.setData(data.getData()); 
      //if edit mode is 1, intent is from camera 
      Camera2BasicFragment.putExtra("EditMode", true); 
      startActivity(Camera2BasicFragment); 
     } 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 
} 


Camera2BasicFragment.java 


public class Camera2BasicFragment extends Fragment implements View.OnClickListener { 
/** 
* Conversion from screen rotation to JPEG orientation. 
*/ 
private static final SparseIntArray ORIENTATIONS = new SparseIntArray(); 

static { 
    ORIENTATIONS.append(Surface.ROTATION_0, 90); 
    ORIENTATIONS.append(Surface.ROTATION_90, 0); 
    ORIENTATIONS.append(Surface.ROTATION_180, 270); 
    ORIENTATIONS.append(Surface.ROTATION_270, 180); 
} 

/** 
* Tag for the {@link Log}. 
*/ 
private static final String TAG = "Camera2BasicFragment"; 

/** 
* Camera state: Showing camera preview. 
*/ 
private static final int STATE_PREVIEW = 0; 

/** 
* Camera state: Waiting for the focus to be locked. 
*/ 
private static final int STATE_WAITING_LOCK = 1; 
/** 
* Camera state: Waiting for the exposure to be precapture state. 
*/ 
private static final int STATE_WAITING_PRECAPTURE = 2; 
/** 
* Camera state: Waiting for the exposure state to be something other than precapture. 
*/ 
private static final int STATE_WAITING_NON_PRECAPTURE = 3; 
/** 
* Camera state: Picture was taken. 
*/ 
private static final int STATE_PICTURE_TAKEN = 4; 

/** 
* {@link TextureView.SurfaceTextureListener} handles several lifecycle events on a 
* {@link TextureView}. 
*/ 
private final TextureView.SurfaceTextureListener mSurfaceTextureListener 
     = new TextureView.SurfaceTextureListener() { 

    @Override 
    public void onSurfaceTextureAvailable(SurfaceTexture texture, int width, int height) { 
     openCamera(width, height); 
    } 

    @Override 
    public void onSurfaceTextureSizeChanged(SurfaceTexture texture, int width, int height) { 
     configureTransform(width, height); 
    } 

    @Override 
    public boolean onSurfaceTextureDestroyed(SurfaceTexture texture) { 
     return true; 
    } 

    @Override 
    public void onSurfaceTextureUpdated(SurfaceTexture texture) { 
    } 

}; 

/** 
* ID of the current {@link CameraDevice}. 
*/ 
private String mCameraId; 

/** 
* An {@link AutoFitTextureView} for camera preview. 
*/ 
private AutoFitTextureView mTextureView; 

/** 
* A {@link CameraCaptureSession } for camera preview. 
*/ 

private CameraCaptureSession mCaptureSession; 
/** 
* A reference to the opened {@link CameraDevice}. 
*/ 

private CameraDevice mCameraDevice; 
/** 
* The {@link android.util.Size} of camera preview. 
*/ 

private Size mPreviewSize; 

/** 
* {@link CameraDevice.StateCallback} is called when {@link CameraDevice} changes its state. 
*/ 
private final CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() { 

    @Override 
    public void onOpened(CameraDevice cameraDevice) { 
     // This method is called when the camera is opened. We start camera preview here. 
     mCameraOpenCloseLock.release(); 
     mCameraDevice = cameraDevice; 
     createCameraPreviewSession(); 
    } 

    @Override 
    public void onDisconnected(CameraDevice cameraDevice) { 
     mCameraOpenCloseLock.release(); 
     cameraDevice.close(); 
     mCameraDevice = null; 
    } 

    @Override 
    public void onError(CameraDevice cameraDevice, int error) { 
     mCameraOpenCloseLock.release(); 
     cameraDevice.close(); 
     mCameraDevice = null; 
     Activity activity = getActivity(); 
     if (null != activity) { 
      activity.finish(); 
     } 
    } 

}; 


static class CompareSizesByArea implements Comparator<Size> { 

    @Override 
    public int compare(Size lhs, Size rhs) { 
     // 

public static class ErrorDialog extends DialogFragment { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     final Activity activity = getActivity(); 
     return new AlertDialog.Builder(activity) 
       .setMessage("This device doesn't support Camera2 API.") 
       .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialogInterface, int i) { 
         activity.finish(); 
        } 
       }) 
       .create(); 
    } 

} 

} 


activity_main.xml 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/main_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/background_color" 
tools:context=".MainActivity" > 

<ImageButton 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:contentDescription="@string/startApp" 
    android:src="@drawable/gallery_icon" 
    android:background="@android:color/transparent" 
    android:text="@string/startApp" /> 

<ImageButton 
    android:id="@+id/button2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/button1" 
    android:layout_centerHorizontal="true" 
    android:contentDescription="@string/startApp" 
    android:src="@drawable/lense_icon" 
    android:background="@android:color/transparent" 
    android:text="@string/startApp" /> 

</RelativeLayout> 

fragment_camera2_basic.xml 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<com.example.android.camera2basic.AutoFitTextureView 
    android:id="@+id/texture" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentTop="true" /> 

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentStart="true" 
    android:layout_below="@id/texture" 
    android:background="#4285f4"> 

    <Button 
     android:id="@+id/picture" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="@string/picture" /> 

    <ImageButton 
     android:id="@+id/info" 
     android:contentDescription="@string/description_info" 
     style="@android:style/Widget.Material.Light.Button.Borderless" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical|right" 
     android:padding="20dp" 
     android:src="@drawable/ic_action_info" /> 

</FrameLayout> 

</RelativeLayout> 
+0

가능한 중복의 [Android Fragment ID가 발견되지 않았습니다?] (http://stackoverflow.com/questions/7508044/android-fragment-no-view-found-for-id) –

답변

0

android 카메라를 사용하기위한 android 권한을 할당하셨습니까? 당신은 컨테이너 FrameLayoutMainActivity 뷰 계층에 정의하지 않아도,

((ImageButton) findViewById(R.id.button2)) 
     .setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
       getFragmentManager().beginTransaction() 
         .replace(R.id.container, Camera2BasicFragment.newInstance()) 
         .commit(); 
      } 
     }); 

을하지만 : 당신의 ImageButton 리스너가 어떤 조각 대신에 Camera2BasicFragment를 추가 할 찾고

0

주의 R.id.container에 거주하고 있습니다. activity_main.xml 레이아웃 파일에는 ImageButton 두 개만 표시됩니다.

관련 문제