利用した Navigation drawer
各アイテムをクリックしてFragments
を呼び出したため、1つのアイテムでこのフラグメントのFragment
を呼び出しました。カメラから画像を取得し、canvas background
。これでカメラの画像をキャプチャしましたが、キャプチャ後にこの画像を取得してキャンバスの背景に設定する方法がわかりません。
フラグメントコード
import Android.content.ContentValues;
import Android.content.Context;
import Android.content.Intent;
import Android.graphics.Bitmap;
import Android.graphics.BitmapFactory;
import Android.graphics.Canvas;
import Android.graphics.Color;
import Android.graphics.Paint;
import Android.net.Uri;
import Android.os.Build;
import Android.os.Bundle;
import Android.os.Environment;
import Android.provider.MediaStore;
import Android.support.v4.app.Fragment;
import Android.util.DisplayMetrics;
import Android.util.Log;
import Android.view.LayoutInflater;
import Android.view.MotionEvent;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.Button;
import Android.widget.ImageButton;
import Android.widget.LinearLayout;
import Android.widget.Toast;
import com.ssoft.admin.code.SharedPreferenceStore;
import com.ssoft.admin.code.Tools;
import com.ssoft.admin.salesmateco.FragSiteInspectionAdditional;
import com.ssoft.admin.salesmateco.R;
import Java.io.BufferedInputStream;
import Java.io.File;
import Java.io.FileInputStream;
import Java.io.FileNotFoundException;
import Java.io.FileOutputStream;
import Java.io.IOException;
import Java.util.ArrayList;
import Java.util.List;
public class FragSignature extends Fragment implements View.OnClickListener {
Button mSIBtnCamera;
Fragment fragment;
Tools mTools;
private static final int RESULT_OK = 1;
private static final int RESULT_CANCELED = 0;
Uri imageUri = null;
final int CAMERA_DATA = 100, INTENT_DATA = 1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(
R.layout.frag_site_inspection_signature, null);
mSIBtnCamera = (Button) rootView.findViewById(R.id.camera);
mSIBtnCamera.setOnClickListener(this);
return rootView;
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.camera) {
captureImage();
}
else {
Toast.makeText(getActivity().getApplicationContext(),
"FragSIPhotos Add Button OnClick", Toast.LENGTH_SHORT)
.show();
}
}
public void captureImage() {
// Define the file-name to save photo taken by Camera activity
String fileName = "Images.jpg";
// Create parameters for Intent with filename
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
values.put(MediaStore.Images.Media.DESCRIPTION,
"Image capture by camera");
// imageUri is the current activity attribute, define and save it for
// later usage
Uri imageUri = getActivity().getApplicationContext()
.getContentResolver()
.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
/****
* EXTERNAL_CONTENT_URI : style URI for the "primary" external storage
* volume.
****/
// Standard Intent action that can be sent to have the camera
// application capture an image and return it.
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, INTENT_DATA);
Log.e("captureImage()", "state -1");
getActivity().startActivityForResult(intent, CAMERA_DATA);
Log.e("captureImage()", "end");
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.e("OnActivityResult()", "1");
if (requestCode == CAMERA_DATA) {
Log.e("OnActivityResult()", "2");
if (resultCode == RESULT_OK) {
// Image captured and saved to fileUri specified in the Intent
Log.e("OnActivityResult()", "3");
} else if (resultCode == RESULT_CANCELED) {
// User cancelled the image capture
Log.e("OnActivityResult()", "4");
} else {
// Image capture failed, advise user
Log.e("OnActivityResult()", "5");
}
}
Log.e("OnActivityResult()", "6");
super.onActivityResult(requestCode, resultCode, data);
Log.e("OnActivityResult()", "7");
}
}
アクティビティクラス:
_@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode,resultCode,data);
}
_
フラグメント内:
_@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){}
_
オプション1 :
フラグメントからstartActivityForResult()
を呼び出す場合は、startActivityForResult()
ではなくgetActivity().startActivityForResult()
を呼び出す必要があります。フラグメントonActivityResult()
が生成されるためです。
startActivityForResult()
でどこを呼び出しているのか、メソッドをどのように呼び出すのかわからない場合。
オプション2:
ActivityはonActivityResult()
の結果を取得するため、アクティビティのonActivityResult()
をオーバーライドし、super.onActivityResult()
を呼び出して、未処理の結果コードまたはすべての個々のフラグメントに伝播する必要があります。
上記の2つのオプションが機能しない場合は、確実に機能するため、オプション3を参照してください。
オプション3:
次のように、フラグメントからonActivityResult関数への明示的な呼び出し
Parent Activityクラスでは、onActivityResult()
メソッドをオーバーライドし、Fragment Classで同じものをオーバーライドして、次のコードとして呼び出します。
活動中:
_@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().findFragmentById("yourFragment");
fragment.onActivityResult(requestCode, resultCode, data);
}
_
フラグメント内:
_@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//in fragment class callback
}
_
交換
getActivity().startActivityForResult(intent, CAMERA_DATA);
と
startActivityForResult(intent, CAMERA_DATA);
onActivityResultはActivityに実装する必要があります。このクラスはフラグメントです。
Apply onActivityResult FragmentActivity内。