在不同的活动中绘制位图

时间:2015-11-04 12:20:57

标签: android android-activity android-studio bitmap

所以我的应用程序应该有意图捕获图像然后在不同的活动中绘制该图像,但它不起作用。这是我的代码: 主要活动:

b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            File photo = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "pic.jpg");
            imageUri = Uri.fromFile(photo);
            startActivityForResult(intent, 2);
        }
    });
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 2) {
        Intent k = new Intent(MainActivity.this, FullActivity.class);
        startActivity(k);
    }
}

第二项活动:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     super.onActivityResult(requestCode, resultCode, data);
     Uri selectedImage = imageUri;
     iv.setImageBitmap(bp);
}

有人可以帮助我并说明问题所在。提前谢谢。

3 个答案:

答案 0 :(得分:1)

您需要将Uri作为字符串与Intent中的MainActivity一起传递。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 2) {
        Intent k = new Intent(MainActivity.this, FullActivity.class);
        k.putExtra("uri", imageUri.toString());
        startActivity(k);
    }
}

然后获取FullActivity中的字符串并将其解析为Uri,然后使用该字符串设置ImageView

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    String uriString = getIntent().getStringExtra("uri");
    Uri selectedImage = Uri.parse(uriString);
    // you may also need to call imageView.setImageURI(null); here
    // or get the bitmap first to use imageView.setImageBitmap();
    imageView.setImageURI(selectedImage);
}

答案 1 :(得分:0)

来自here

  

当您启动的活动退出时调用,为您提供requestCode   你开始使用它返回的resultCode,以及任何其他的   来自它的数据

启动onActivityResult

时,Second activity永远不会被调用

尝试在uri

中的Main activity中发送您收到的Bundle
 Uri imageUri = intent.getData();
 Intent intent = new Intent(MainActivity.this, SecondActiviy.class);
 intent.putExtra("mUri", imageUri.toString());

你可以在SecondActivity

上获得这个uri
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    String uri= getIntent().getStringExtra("mUri");
    Uri imageUri= Uri.parse(uri);
    Bitmap bitmap=MediaStore.Images.Media.getBitmap(this.getContentResolver(),imageUri);
}

答案 2 :(得分:0)

// Global Declaration<br>    

        private Uri fileUri;
        private static final int REQUEST_CODE_PHOTO = 101;

        // Click for capture Image

        fileUri = getOutputMediaFileUri(REQUEST_CODE_PHOTO); // create a file to save the image
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
        startActivityForResult(intent, REQUEST_CODE_PHOTO);



        @Override
            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                try {
                    super.onActivityResult(requestCode, resultCode, data);
                    if (requestCode == REQUEST_CODE_PHOTO) {
                        if (resultCode == RESULT_OK) {
                        String PATH = fileUri.getPath();

                        Intent k = new Intent(MainActivity.this, FullActivity.class);
                        k.putExtra("KEY_FOR_PATH, PATH);
                        startActivity(k);


                    }
                }
            }
        }


        // In FullActivity

        String pathOfFile = getIntent().getExtras().getString("KEY_FOR_PATH");
        Bitmap myBitmap = BitmapFactory.decodeFile(pathOfFile);

        //Now set myBitmap in ImageView
        imageView.setImageBitmap(myBitmap)

//添加此方法

private Uri getOutputMediaFileUri(int type){
        File imagesFolder = new File(Environment.getExternalStorageDirectory(), "YOUR IMAGE FOLDER");
        if(imagesFolder != null && !imagesFolder.exists()) {
            imagesFolder.mkdirs();
        }
        int photonum = AppTypeDetails.getInstance(MainActivity.this).getImageName();
        AppTypeDetails.getInstance(ReportTab.this).setImageName(++photonum);
        File image = new File(imagesFolder, String.format("image%08d.jpeg", photonum));
        return Uri.fromFile(image);
    }