onActivityResult例子
时间: 2023-04-06 21:04:51 浏览: 50
我可以回答这个问题。onActivityResult是一个Android开发中的方法,用于处理Activity之间的数据传递。当一个Activity启动另一个Activity并期望获取返回结果时,可以使用onActivityResult方法来处理返回的数据。例如,当用户从相册中选择一张照片后,可以使用onActivityResult方法来获取所选照片的路径。
相关问题
android studio数据回传例子
以下是一个Android Studio数据回传的例子:
1.在Activity A中,我们定义一个requestCode和一个Intent,然后使用startActivityForResult()方法启动Activity B:
```java
public class ActivityA extends AppCompatActivity {
private static final int REQUEST_CODE = 1;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
intent = new Intent(ActivityA.this, ActivityB.class);
startActivityForResult(intent, REQUEST_CODE); }
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
String result = data.getStringExtra("result");
Toast.makeText(ActivityA.this, result, Toast.LENGTH_SHORT).show();
}
}
}
```
2.在Activity B中,我们定义一个Intent,然后使用setResult()方法将数据回传给Activity A:
```java
public class ActivityB extends AppCompatActivity {
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
intent = getIntent();
}
@Override
public void onBackPressed() {
String result = "Data returned from Activity B";
intent.putExtra("result", result);
setResult(RESULT_OK, intent);
finish();
}
}
```
在Activity B中,我们重写了onBackPressed()方法,当用户按下返回键时,我们将数据回传给Activity A,并关闭Activity B。
Android GrabCut的例子
下面是 Android 上使用 GrabCut 算法的一个简单例子:
1. 创建一个新的 Android 项目,并在布局文件中添加一个 ImageView 元素。
2. 在 MainActivity 中,定义以下变量:
```java
private static final int SELECT_PHOTO = 100;
private Bitmap mBitmap;
private ImageView mImageView;
```
3. 在 onCreate() 方法中,获取 ImageView 的引用,并设置点击事件:
```java
mImageView = findViewById(R.id.imageView);
mImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, SELECT_PHOTO);
}
});
```
4. 实现 onActivityResult() 方法,获取用户选择的图片,并调用 GrabCut 算法将背景去除:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SELECT_PHOTO && resultCode == RESULT_OK && data != null) {
Uri selectedImage = data.getData();
try {
mBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);
mImageView.setImageBitmap(grabCut(mBitmap));
} catch (IOException e) {
e.printStackTrace();
}
}
}
private Bitmap grabCut(Bitmap bitmap) {
Mat img = new Mat();
Utils.bitmapToMat(bitmap, img);
Rect rectangle = new Rect(20, 20, img.width() - 40, img.height() - 40);
Mat result = new Mat();
Mat bgModel = new Mat();
Mat fgModel = new Mat();
Mat source = new Mat(1, 1, CvType.CV_8U, new Scalar(Imgproc.GC_PR_FGD));
Imgproc.grabCut(img, result, rectangle, bgModel, fgModel, 5, Imgproc.GC_INIT_WITH_RECT);
Core.compare(result, source, result, Core.CMP_EQ);
Mat foreground = new Mat(img.size(), CvType.CV_8UC3, new Scalar(255, 255, 255));
img.copyTo(foreground, result);
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(foreground, output);
return output;
}
```
在这个方法中,我们首先将 Bitmap 对象转换为 OpenCV 的 Mat 对象,然后定义一个矩形区域,用于指定要进行 GrabCut 操作的区域。然后,我们调用 Imgproc.grabCut() 方法执行实际的 GrabCut 算法。最后,将结果转换回 Bitmap 对象并返回。
这个例子演示了如何在 Android 应用程序中使用 OpenCV 库来实现 GrabCut 算法。注意,这个例子仅供参考,实际使用中可能需要进行更多的调整和优化。