【问题标题】:ImageView doesn't insert camera picture in fragmentImageView 不会在片段中插入相机图片
【发布时间】:2015-05-04 20:28:40
【问题描述】:

我正面临一个大问题,我已经问了很多人,但没有人能帮助我。

如标题所示,我制作了一个包含三个片段的 Android 应用。 在一个片段中,当单击一个空的 ImageView 时,我想打开一个相机。 拍照后,ImageView 应该显示从相机捕获的图像。

应用会打开相机并拍照,但不会在 ImageView 中插入图片。

这段代码在我的片段中

public class FragmentNew extends Fragment {

public static final int CAMERA_PIC_REQUEST_1 = 1;
public static final int CAMERA_PIC_REQUEST_2 = 2;
public static final int SELECT_PIC_REQUEST_1 = 3;
public static final int SELECT_PIC_REQUEST_2 = 4;

ImageView imageView1;
ImageView imageView2;
View rootView;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {

   final View rootView =  inflater.inflate(R.layout.fragment_new,container, false);
   imageView1 = (ImageView) rootView.findViewById(R.id.image_pic1);
   imageView2 = (ImageView) rootView.findViewById(R.id.image_pic2);

   return rootView;
}


public void check(int requestCode, int resultCode, Intent data,ImageView imv1,ImageView imv2) {

    Log.d("Name", "onActivityResult");
    switch(requestCode){
        case CAMERA_PIC_REQUEST_1:
            if(resultCode== Activity.RESULT_OK && data != null && data.getExtras().get("data")!=null){
                   Log.d("TAG1","Photo pic1"); 
                   Bitmap photo = (Bitmap) data.getExtras().get("data");                    
                   imv1.setImageBitmap(photo);
                   Log.d("TAG1","Photo pic1 was set");

            }
            break;

        case CAMERA_PIC_REQUEST_2:
            if(resultCode== Activity.RESULT_OK && data != null && data.getExtras().get("data")!=null){
                   Log.d("TAG2","Photo pic2"); 
                   Bitmap photo2 = (Bitmap) data.getExtras().get("data"); 
                   //imv2.setImageBitmap(photo2);
                   imv2.setBackgroundColor(Color.rgb(255, 0, 255));
                   Log.d("TAG2","Photo pic2 was set");
             }
            break;

            default:
                Log.d("Error","It doesn't work");
    }
}

}

主活动:

public void onButtonClick(View view)
{
    switch(view.getId())
    {
    case R.id.image_accept:
        EditText text;
        text = (EditText)findViewById(R.id.edit_title);
        Toast.makeText(this,"Decision "+ text.getText().toString()+" was created!",Toast.LENGTH_SHORT).show();
        break;
    case R.id.image_pic1:
        Builder builderpic1 = new Builder(this);
        builderpic1.setTitle("Pick a Pic")
               .setIcon(android.R.drawable.ic_dialog_info)
               .setItems(R.array.selection, new OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch(which)
                    {
                    case 0:
                        //Intent galeryintent = new Intent(Intent.ACTION_VIEW, Uri.parse(
                        //       "content://media/internal/images/media")); 
                        //       startActivity(galeryintent);

                        //Intent intent = new Intent();
                        //intent.setType("image/*");
                        //intent.setAction(Intent.ACTION_GET_CONTENT);
                        //startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PIC_REQUEST_1);

                        Intent intent = new Intent();
                        intent.setType("image/*");
                        intent.setAction(Intent.ACTION_GET_CONTENT);
                        //startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PIC_REQUEST_1);
                        startActivityForResult(intent, FragmentNew.SELECT_PIC_REQUEST_1);        
                        break;
                    case 1:
                        Intent photointent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        startActivityForResult(photointent, FragmentNew.CAMERA_PIC_REQUEST_1);

                        break;
                    case 2:     
                        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://images.google.com/"));
                        startActivity(browserIntent);
                        break;
                    }

                    dialog.dismiss();

                }
            })
               .show();
        break;
    case R.id.image_pic2:
        Builder builderpic2 = new Builder(this);
        builderpic2.setTitle("Pick a Pic")
               .setIcon(android.R.drawable.ic_dialog_info)
               .setItems(R.array.selection, new OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch(which)
                    {
                    case 0:
                        Intent galeryintent = new Intent(Intent.ACTION_VIEW, Uri.parse(
                                 "content://media/internal/images/media")); 
                                 startActivity(galeryintent);
                        break;
                    case 1:
                        Intent photointent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        startActivityForResult(photointent2, FragmentNew.CAMERA_PIC_REQUEST_2);
                        break;
                    case 2:     
                        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://images.google.com/"));
                        startActivity(browserIntent);
                        break;
                    }

                    dialog.dismiss();

                }
            })
               .show();
        break;
    }
}


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Fragment myFragment = (Fragment) getSupportFragmentManager().findFragmentById(R.id.fragment_new);

    ImageView imv1= (ImageView)findViewById(R.id.image_pic1);
    ImageView imv2= (ImageView)findViewById(R.id.image_pic2);

    ((FragmentNew)myFragment).check(requestCode, resultCode, data,imv1,imv2);
}

BackgroundColor 只是设置来检查问题是否出在位图中,但 BackgroundColor 也没有改变,所以我认为问题是,片段在 onActivityResult() 中找不到 ImageView。 Log.d 显示在控制台中,但 ImageView 保持为空。

我希望你能帮助我。

【问题讨论】:

  • 我不认为你的图像视图没有找到,或者它会是空的,你会在 imv2.setBackgroundColor(Color.rgb(255, 0, 255));所以至少现在还不是你的问题。它是否输出您的 Log.d("TAG2","Photo pic2"); ?
  • 是的,输出打印在控制台中
  • 它输出日志但不设置背景?你能看到以前的背景吗?你确定你的 ImageView 的尺寸吗?
  • 是的,Log输出打印出来了,但是背景没有变化,imageview就像是相机应该拍照之前一样。

标签: android android-fragments camera imageview onactivityresult


【解决方案1】:

对不起,我找不到您的 onActivityResult 方法以及您在哪里设置 ImageView OnclickListener。也许他们在你的活动课上。 除了 ImageView 参数之外,您的检查方法看起来很像 onActivityResult 方法。您是否自己调用了检查方法?它在你的 onActivityResult 中吗?

也许你做了这样的事情,然后我不知道你的代码有什么问题:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
    mFragment.check(requestCode, resultCode, data, mImageView1, mImageView2);
}

实际上,如果您不介意将图片保存在设备上,您也可以这样做:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(outputFile));
startActivityForResult(intent,CAMERA_PIC_REQUEST_1);

在你的 onActivityResult 中:

Bitmap bm = BitmapFactory.decodeFile(outputFile.getPath());
mImageView1.setImageBitmap(bm);

不过我觉得你的方法应该也行,只是没试过。

能否请您添加更多代码,以便我们查看您调用 startActivityForResult 和 onActivityResult 方法的位置?

【讨论】:

  • 我编辑新代码,抱​​歉 check() 函数之前是 onActivityResult() 函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
相关资源
最近更新 更多