2016-05-11 4 views
1

写真を作って新しいアクティビティで表示したい、 私はトースト「キャプチャに失敗しました」を取得します。ログは順番に見えます。 このトーストはonActivityResultメソッドで見つけることができます。カメラからのキャプチャが失敗しました

public class FragmentScaling extends Fragment implements View.OnClickListener{ 

Button btnCamera, btnGallery; 
private static final int PHOTO_INTENT_REQUEST_CODE = 100; 
private static final int GALLERY_INTENT_REQUEST_CODE = 1; 
public Uri uri; 

public FragmentScaling() { 
    // Required empty public constructor 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_scaling, container, false); 
    btnCamera = (Button) view.findViewById(R.id.b_camera); 
    btnGallery = (Button) view.findViewById(R.id.b_gallery); 
    btnCamera.setOnClickListener(this); 
    btnGallery.setOnClickListener(this); 
    uri = generateFileUri(); 

    return view; 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()){ 
     //если выбрали камеру - запускаем ее 
     case R.id.b_camera: 
      //uri = generateFileUri(); 
      if (uri == null) { 
       Toast.makeText(getView().getContext(), getResources().getString(R.string.sdnot), Toast.LENGTH_LONG).show(); 
       return; 
      } 
      Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, uri); 
      //intentCamera.putExtra("return-data", true); 
      startActivityForResult(intentCamera, PHOTO_INTENT_REQUEST_CODE); 
     break; 

    } 
} 

//получаем результат из галереи или камеры 
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent imageReturned) { 

    switch (requestCode) { 

     //если результат пришел от камеры 
     case PHOTO_INTENT_REQUEST_CODE: 
      if (resultCode == getActivity().RESULT_OK) { 
       Log.i("HHHHHHHHHHHH", "result ok"); 
       //извлекаем uri фотки из интента 
       Uri selectedImage = uri; 
       Log.i("HHHHHHHHHHHH", "getdata works!"); 
       //создаем интент для запуска новой активити 
       Intent last_intent_photo = new Intent(getView().getContext(), ViewPhoto.class); 
       //помещаем в интент этот uri 
       last_intent_photo.putExtra("fotka", selectedImage); 
       //стартуем новую активити 
       startActivity(last_intent_photo); 

      } else if (resultCode == getActivity().RESULT_CANCELED) 
       Toast.makeText(getView().getContext(), "Capture cancelled", Toast.LENGTH_LONG).show(); 
      else 
       Toast.makeText(getView().getContext(), "Capture failed", Toast.LENGTH_LONG).show(); 
       break; 
     default: super.onActivityResult(requestCode, resultCode, imageReturned); 

    } 
} 

private Uri generateFileUri() { 
    // Проверяем доступность SD карты 
    if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) 
     return null; 

    // Проверяем и создаем директорию 
    File path = new File (Environment.getExternalStorageDirectory(), "CameraTest"); 
    if (! path.exists()){ 
     if (! path.mkdirs()){ 
      return null; 
     } 
    } 

    // Создаем имя файла 
    String timeStamp = String.valueOf(System.currentTimeMillis()); 
    File newFile = new File(path.getPath() + File.separator + timeStamp + ".jpg"); 
    return Uri.fromFile(newFile); 
} 

// Save the activity state when it's going to stop. 
@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    if (uri != null) { 
     outState.putString("uri", uri.toString()); 
    } 
} 

// Recover the saved state when the activity is recreated. 
@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    if (getActivity().getIntent().hasExtra("uri")) { 
      uri = (Uri)getActivity().getIntent().getParcelableExtra("uri"); 
     } 
    } 
} 

ご協力いただきたいと思います。 私をキックしないでください。私はほとんど

public class ViewPhoto extends Activity { 

    private ZoomControls zoom; 
    CustomImageVIew imageView; 

    private float scaleWidth = 1; 
    private float scaleHeight = 1; 
    private Bitmap bmp; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.view_photo_layout); 

     DisplayMetrics dm = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(dm); 

     imageView = (CustomImageVIew)findViewById(R.id.customImageVIew); 

     zoom = (ZoomControls) findViewById(R.id.zoomControls); 

     //получаем интент, достаем из него фотку и ставим в имиджвью 
     Intent intent = getIntent(); 
     Uri uri = (Uri) intent.getExtras().getParcelable("fotka"); 
     try { 
      bmp = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), uri); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     //imageView.setImageURI(uri); 

     // увеличение 
     zoom.setOnZoomInClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       int bmpWidth = bmp.getWidth(); 
       int bmpHeight = bmp.getHeight(); 

       double scale = 1.25; 

       scaleWidth = (float) (scaleWidth * scale); 
       scaleHeight = (float) (scaleHeight * scale); 

       Matrix matrix = new Matrix(); 
       matrix.postScale(scaleWidth, scaleHeight); 
       Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, 
         bmpHeight, matrix, true); 
       imageView.setImageBitmap(resizeBmp); 
      } 
     }); 

     // уменьшение 
     zoom.setOnZoomOutClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       int bmpWidth = bmp.getWidth(); 
       int bmpHeight = bmp.getHeight(); 

       double scale = 0.8; 

       scaleWidth = (float) (scaleWidth * scale); 
       scaleHeight = (float) (scaleHeight * scale); 

       Matrix matrix = new Matrix(); 
       matrix.postScale(scaleWidth, scaleHeight); 
       Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, 
         bmpHeight, matrix, true); 
       imageView.setImageBitmap(resizeBmp); 
      } 
     }); 
    } 

Class public class ViewPhoto extends Activity { 

    private ZoomControls zoom; 
    CustomImageVIew imageView; 

    private float scaleWidth = 1; 
    private float scaleHeight = 1; 
    private Bitmap bmp; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.view_photo_layout); 

     DisplayMetrics dm = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(dm); 

     imageView = (CustomImageVIew)findViewById(R.id.customImageVIew); 

     zoom = (ZoomControls) findViewById(R.id.zoomControls); 

     //получаем интент, достаем из него фотку и ставим в имиджвью 
     Intent intent = getIntent(); 
     Uri uri = (Uri) intent.getExtras().getParcelable("fotka"); 
     try { 
      bmp = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), uri); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     //imageView.setImageURI(uri); 

     // увеличение 
     zoom.setOnZoomInClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       int bmpWidth = bmp.getWidth(); 
       int bmpHeight = bmp.getHeight(); 

       double scale = 1.25; 

       scaleWidth = (float) (scaleWidth * scale); 
       scaleHeight = (float) (scaleHeight * scale); 

       Matrix matrix = new Matrix(); 
       matrix.postScale(scaleWidth, scaleHeight); 
       Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, 
         bmpHeight, matrix, true); 
       imageView.setImageBitmap(resizeBmp); 
      } 
     }); 

     // уменьшение 
     zoom.setOnZoomOutClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       int bmpWidth = bmp.getWidth(); 
       int bmpHeight = bmp.getHeight(); 

       double scale = 0.8; 

       scaleWidth = (float) (scaleWidth * scale); 
       scaleHeight = (float) (scaleHeight * scale); 

       Matrix matrix = new Matrix(); 
       matrix.postScale(scaleWidth, scaleHeight); 
       Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, 
         bmpHeight, matrix, true); 
       imageView.setImageBitmap(resizeBmp); 
      } 
     }); 
    } 

クラスpublic classのViewPhotoアクティビティを拡張)))勉強していないよ{

private ZoomControls zoom; 
CustomImageVIew imageView; 

private float scaleWidth = 1; 
private float scaleHeight = 1; 
private Bitmap bmp; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.view_photo_layout); 

    DisplayMetrics dm = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(dm); 

    imageView = (CustomImageVIew)findViewById(R.id.customImageVIew); 

    zoom = (ZoomControls) findViewById(R.id.zoomControls); 

    //получаем интент, достаем из него фотку и ставим в имиджвью 
    Intent intent = getIntent(); 
    Uri uri = (Uri) intent.getExtras().getParcelable("fotka"); 
    try { 
     bmp = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), uri); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    //imageView.setImageURI(uri); 

    // увеличение 
    zoom.setOnZoomInClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      int bmpWidth = bmp.getWidth(); 
      int bmpHeight = bmp.getHeight(); 

      double scale = 1.25; 

      scaleWidth = (float) (scaleWidth * scale); 
      scaleHeight = (float) (scaleHeight * scale); 

      Matrix matrix = new Matrix(); 
      matrix.postScale(scaleWidth, scaleHeight); 
      Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, 
        bmpHeight, matrix, true); 
      imageView.setImageBitmap(resizeBmp); 
     } 
    }); 

    // уменьшение 
    zoom.setOnZoomOutClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      int bmpWidth = bmp.getWidth(); 
      int bmpHeight = bmp.getHeight(); 

      double scale = 0.8; 

      scaleWidth = (float) (scaleWidth * scale); 
      scaleHeight = (float) (scaleHeight * scale); 

      Matrix matrix = new Matrix(); 
      matrix.postScale(scaleWidth, scaleHeight); 
      Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, 
        bmpHeight, matrix, true); 
      imageView.setImageBitmap(resizeBmp); 
     } 
    }); 
} 

CustomImageVIewはImageViewの拡張し、マルチタッチを実現します。

view_photo_layout.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ZoomControls 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/zoomControls" 
     android:layout_gravity="center_horizontal|bottom" 
     android:layout_margin="5dp" /> 

    <ru.bunakov.testapplication.CustomImageVIew 
     android:id="@+id/customImageVIew" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginBottom="5dp" 
     android:layout_marginLeft="5dp" 
     android:layout_marginRight="5dp" 
     android:layout_marginTop="5dp" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:scaleType="matrix"/> 
</FrameLayout> 

答えて

1

あなたは許可を追加しましたか?

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

この方法

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

    if (savedInstanceState != null && savedInstanceState.containsKey("uri")) { 
     uri = Uri.parse(savedInstanceState.getString("uri")); 
    } 
} 
+0

конечноのдаuri使用を回復します! ;)。 –

+0

✔OnActivityCreatedметод、янеправильнопонятвтомпосте –

+0

спасибо! получилось! работает! Теперьоткрываетсяноваяактивити、нопустая! Ивлогахничего....откудакопать? –

関連する問題