2013-09-18 4 views
0

У меня есть приложение для камеры в Android. Существует изображение и две кнопки. Когда я нахожусь в ландшафтном режиме, две кнопки будут доступны на изображении и когда я буду в режиме портрета, кнопки будут скрыты, а соотношение сторон будет правильным.У меня есть приложение для камеры в Android

enter image description here

общественный класс CustomCameraActivity расширяет активность реализует SurfaceHolder.Callback {

Camera camera; 
SurfaceView surfaceView; 
SurfaceHolder surfaceHolder; 
boolean previewing = false; 
LayoutInflater controlInflater = null; 
Context context; 
ImageView imageView; 

SensorManager sensorManager; 
float[] mGravs = new float[3]; 
float[] mGeoMags = new float[3]; 
float[] mRotationM = new float[16]; 
float[] mInclinationM = new float[16]; 
float[] mOrientation = new float[3]; 
float[] mOldOreintation = new float[3]; 
String[] mAccelerometer = new String[3]; 
String[] mMagnetic = new String[3];  
String[] mRotation = new String[16]; 
String[] mInclination = new String[16]; 
String[] mOrientationString = new String[3]; 
String[] mOldOreintationString = new String[3]; 


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

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

    setContentView(R.layout.main); 

    context = this; 

    sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 

    //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

    imageView = (ImageView)findViewById(R.id.imgError); 

    getWindow().setFormat(PixelFormat.UNKNOWN); 
    surfaceView = (SurfaceView)findViewById(R.id.camerapreview); 
    surfaceHolder = surfaceView.getHolder(); 
    surfaceHolder.addCallback(this); 
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    controlInflater = LayoutInflater.from(getBaseContext()); 

    View viewControl = controlInflater.inflate(R.layout.custom, null); 
    LayoutParams layoutParamsControl = new LayoutParams(LayoutParams.FILL_PARENT, 
               LayoutParams.FILL_PARENT); 


    Button btn1 = (Button)viewControl.findViewById(R.id.Button01); 
    Button btn2 = (Button)viewControl.findViewById(R.id.Button02); 

    btn1.setOnClickListener(new OnClickListener() { 

    @Override 
     public void onClick(View arg0) { 
      //Toast.makeText(context, "1111111111111111111111111", Toast.LENGTH_SHORT).show(); 
      camera.takePicture(null, null, mPicture); 

      Constant.rotationValueForCamera = Constant.rotationValue; 
     } 
    }); 

    btn2.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      //Toast.makeText(context, "22222222222222222222222222", Toast.LENGTH_SHORT).show(); 
      Log.e("0 imagePickerStatus", Constant.imagePickerStatus+""); 

      Constant.imagePickerStatus = 0; 

      Log.e("0 imagePickerStatus", Constant.imagePickerStatus+""); 


      finish(); 
     } 
    }); 

    this.addContentView(viewControl, layoutParamsControl); 

    int ot = getResources().getConfiguration().orientation; 

    if(Configuration.ORIENTATION_LANDSCAPE == ot) 
    { 
     imageView.setVisibility(View.GONE); 
     Log.e("ori1111", "land"); 
    } 
    else 
    { 
     imageView.setVisibility(View.VISIBLE); 
     Log.e("ori111", "port"); 
    } 
} 
@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 

     //Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
     imageView.setVisibility(View.GONE); 
     Log.e("ori", "land"); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     //Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
     imageView.setVisibility(View.VISIBLE); 
     Log.e("ori", "port"); 
    } 
    } 

public String getPollDeviceAttitude() 
{ 

    return Constant.rotationValueForCamera; 
} 

private SensorEventListener sensorEventListener = new SensorEventListener() { 

    public void onAccuracyChanged(Sensor sensor, int accuracy) { 

    } 


    /* Get the Sensors */ 
    public void onSensorChanged(SensorEvent event) { 

      switch (event.sensor.getType()) { 
       case Sensor.TYPE_ACCELEROMETER: 
          System.arraycopy(event.values, 0, mGravs, 0, 3); 
          break; 
       case Sensor.TYPE_MAGNETIC_FIELD: 
          System.arraycopy(event.values, 0, mGeoMags, 0, 3); 
          break; 
       case Sensor.TYPE_ORIENTATION: 
         System.arraycopy(event.values, 0, mOldOreintation, 0, 3); 
        break; 

       default: 
          return; 
     } 

      // If mGravs and mGeoMags have values then find rotation matrix 
      if (mGravs != null && mGeoMags != null) { 

       // checks that the rotation matrix is found 
       boolean success = SensorManager.getRotationMatrix(mRotationM, mInclinationM, mGravs, mGeoMags); 
       if (success) { 
        /* getOrientation Values */ 
        SensorManager.getOrientation(mRotationM, mOrientation); 

         for(int i=0; i<3; i++){ 
          mAccelerometer[i] = Float.toString(mGravs[i]); 
          mMagnetic[i] = Float.toString(mGeoMags[i]); 
          mOrientationString[i] = Float.toString(mOrientation[i]); 
          mOldOreintationString[i] = Float.toString(mOldOreintation[i]); 
         } 

        /* Make everything text to show on device 
         TextView xaxisAccelerometerText = (TextView)findViewById(R.id.xaxisAccelerometer); 
         xaxisAccelerometerText.setText(mAccelerometer[0]);  
         TextView yaxisAccelerometerText = (TextView)findViewById(R.id.yaxisAccelerometer); 
         yaxisAccelerometerText.setText(mAccelerometer[1]); 
         TextView zaxisAccelerometerText = (TextView)findViewById(R.id.zaxisAccelerometer); 
         zaxisAccelerometerText.setText(mAccelerometer[2]);  
         TextView xaxisMagneticText = (TextView)findViewById(R.id.xaxisMagnetic); 
         xaxisMagneticText.setText(mMagnetic[0]);  
         TextView yaxisMagneticText = (TextView)findViewById(R.id.yaxisMagnetic); 
         yaxisMagneticText.setText(mMagnetic[1]); 
         TextView zaxisMagneticText = (TextView)findViewById(R.id.zaxisMagnetic); 
         zaxisMagneticText.setText(mMagnetic[2]); 
         TextView xaxisOrientationText = (TextView)findViewById(R.id.xaxisOrientation); 
         xaxisOrientationText.setText(mOrientationString[0]);  
         TextView yaxisOrientationText = (TextView)findViewById(R.id.yaxisOrientation); 
         yaxisOrientationText.setText(mOrientationString[1]); 
         TextView zaxisOrientationText = (TextView)findViewById(R.id.zaxisOrientation); 
         zaxisOrientationText.setText(mOrientationString[2]); 
         TextView xaxisOldOrientationText = (TextView)findViewById(R.id.xaxisOldOrientation); 
         xaxisOldOrientationText.setText(mOldOreintationString[0]);  
         TextView yaxisOldOrientationText = (TextView)findViewById(R.id.yaxisOldOrientation); 
         yaxisOldOrientationText.setText(mOldOreintationString[1]); 
         TextView zaxisOldOrientationText = (TextView)findViewById(R.id.zaxisOldOrientation); 
         zaxisOldOrientationText.setText(mOldOreintationString[2]);*/ 

         Constant.rotationValue = mOrientationString[0] + " " + mOrientationString[1] + " " + mOrientationString[2]; 





       }else{ 

        /* Make everything text to show on device even if getRotationMatrix fails 
         String matrixFailed = "Rotation Matrix Failed"; 
         TextView xaxisAccelerometerText = (TextView)findViewById(R.id.xaxisAccelerometer); 
         xaxisAccelerometerText.setText(mAccelerometer[0]);  
         TextView yaxisAccelerometerText = (TextView)findViewById(R.id.yaxisAccelerometer); 
         yaxisAccelerometerText.setText(mAccelerometer[1]); 
         TextView zaxisAccelerometerText = (TextView)findViewById(R.id.zaxisAccelerometer); 
         zaxisAccelerometerText.setText(mAccelerometer[2]);  
         TextView xaxisMagneticText = (TextView)findViewById(R.id.xaxisMagnetic); 
         xaxisMagneticText.setText(mMagnetic[0]);  
         TextView yaxisMagneticText = (TextView)findViewById(R.id.yaxisMagnetic); 
         yaxisMagneticText.setText(mMagnetic[1]); 
         TextView zaxisMagneticText = (TextView)findViewById(R.id.zaxisMagnetic); 
         zaxisMagneticText.setText(mMagnetic[2]); 
         TextView xaxisOrientationText = (TextView)findViewById(R.id.xaxisOrientation); 
         xaxisOrientationText.setText(matrixFailed);  
         TextView yaxisOrientationText = (TextView)findViewById(R.id.yaxisOrientation); 
         yaxisOrientationText.setText(matrixFailed); 
         TextView zaxisOrientationText = (TextView)findViewById(R.id.zaxisOrientation); 
         zaxisOrientationText.setText(matrixFailed); 
         TextView xaxisOldOrientationText = (TextView)findViewById(R.id.xaxisOldOrientation); 
         xaxisOldOrientationText.setText(mOldOreintationString[0]);  
         TextView yaxisOldOrientationText = (TextView)findViewById(R.id.yaxisOldOrientation); 
         yaxisOldOrientationText.setText(mOldOreintationString[1]); 
         TextView zaxisOldOrientationText = (TextView)findViewById(R.id.zaxisOldOrientation); 
         zaxisOldOrientationText.setText(mOldOreintationString[2]);*/ 



         Constant.rotationValue = mOrientationString[0] + " " + mOrientationString[1] + " " + mOrientationString[2]; 

       } 
      } 


    } 
}; 

protected void onPause() 
{ 
    super.onPause(); 

    sensorManager.unregisterListener(sensorEventListener); 

} 

@Override 
public void onResume() 
{ 
    super.onResume(); 



    sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 
    sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_NORMAL); 
    sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_NORMAL); 

    if(Constant.isCapturedOk) 
    { 
     Constant.isCapturedOk = false; 

     finish(); 
    } 

} 



PictureCallback mPicture = new PictureCallback() { 
    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 

     Log.e("Camrera", "22222222222222222"); 

     Intent intent = new Intent(context, PreviewActivity.class); 
     //intent.putExtra("data", data); 

     Constant.imageData = data; 

     startActivity(intent); 


    } 
}; 

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

    if (camera != null){ 
     try { 
      camera.setPreviewDisplay(surfaceHolder); 
      camera.startPreview(); 
      previewing = true; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    camera = Camera.open(); 
} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
    camera.stopPreview(); 
    camera.release(); 
    camera = null; 
    previewing = false; 
} 


@Override 
protected void onStop() 
{ 
    super.onStop(); 

    Log.e("Tab", "Stoping"); 
} 

@Override 
    public boolean onKeyDown(int keyCode,KeyEvent event) 
    { 

     if(keyCode==KeyEvent.KEYCODE_BACK) 
     { 

      return true; 

     } 
    return super.onKeyDown(keyCode, event); 


    } 

}

+0

Вы не задали вопрос к своему сообщению. Что не работает в этом? –

+0

Ваш код не заполнен. – Raptor

+0

@AnkurAggarwal PLZ проверить его снова и shivan я разместил весь код. Спасибо –

ответ

0

создавать различные макеты для портретной и альбомной так:

http://mdaslam.wordpress.com/2013/01/15/android-programming-screen-orientationportrait-landscape/

и измените видимость кнопки в другом макете, используя это: android: visibility = "invisible" Ваша проблема, несомненно, будет решена.

+0

Есть ли кто-нибудь, кто может мне помочь ?????? ???? –

+0

Я ответил на ваш вопрос @MohammadRajob, если это не решает вашу проблему, а затем скажите мне. I поможет вам дальше в этом – Hamad

+0

, когда камера находится в ландшафтном режиме, тогда она принимает xml из «layout-land». но когда камера находится в портретном режиме, она не может принимать xml из «layot» .Plz проверить мой код брата. Мне нужна помощь. –

Смежные вопросы