当前位置: 首页 > 知识库问答 >
问题:

我想做一个像WhatsApp个人资料照片对话框屏幕一样的对话框屏幕

祁晟
2023-03-14

你好朋友们....

我目前正在尝试使用隐式意图创建一个对话框,其中我希望显示我的对话框,如whatsApp(个人资料照片屏幕),在该屏幕中,WhatsPP使用了名为“删除照片”的额外字段。当我尝试创建相同类型的屏幕对话框时,我无法添加此额外字段(“删除照片”)。我已经完成了所有代码。对于对话框中的三个选项(Gallery、Photo、Camera),它工作正常,但我无法在onActivityResult()中处理所有这些。我正在发送我的所有源代码。我已经做了很多努力,但我找不到解决方案。请……朋友们帮我摆脱困境。

在这段代码中,我只是创建了一个名为openFileChooser()的方法,在该方法中,我编写了创建对话框屏幕的所有代码,并在onActivityResult()中处理这些结果

这是我的密码

ProfilePhotoActivity.java

public class ProfilePhotoActivity extends Activity implements OnClickListener{
    ImageButton back, editPhoto, selectAction;
    ImageView imgCamera;
    private static final int FILECHOOSER_RESULTCODE   = 2888;
    protected static final int CAMERA_REQUEST = 0;
    protected static final int GALLERY_PICTURE = 1;
    private Uri mCapturedImageURI = null;
    Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_profilephoto);

        back=(ImageButton)findViewById(R.id.btn_back);
        editPhoto=(ImageButton)findViewById(R.id.ibEditPhoto);
        selectAction=(ImageButton)findViewById(R.id.ibSelectAction);

        imgCamera=(ImageView)findViewById(R.id.imvProfilePhoto);

        editPhoto.setOnClickListener(this);
        selectAction.setOnClickListener(this);
        back.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {
        case R.id.btn_back:
            ProfilePhotoActivity.this.finish();
            break;

        case R.id.ibEditPhoto:
            openFileChooser(null, null);
        //  startDialog();


            break;
        case R.id.ibSelectAction:
            break;
        }
    }

     public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType){  

            try{    

             // Create AndroidExampleFolder at sdcard

             File imageStorageDir = new File(
               Environment.getExternalStoragePublicDirectory(
                 Environment.DIRECTORY_PICTURES)
                 , "AndroidExampleFolder");

             if (!imageStorageDir.exists()) {
              // Create AndroidExampleFolder at sdcard
              imageStorageDir.mkdirs();
             }

             // Create camera captured image file path and name 
             File file = new File(
               imageStorageDir + File.separator + "IMG_"
                 + String.valueOf(System.currentTimeMillis()) 
                 + ".jpg");

             mCapturedImageURI = Uri.fromFile(file); 

             // Camera capture image intent
             final Intent captureIntent = new Intent(
               android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

             captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);

             Intent i = new Intent(Intent.ACTION_PICK); 
            // i.addCategory(Intent.CATEGORY_OPENABLE);
             i.setType("image/*");

             // Create file chooser intent
             Intent chooserIntent = Intent.createChooser(i, "Image Chooser");

             // Set camera intent to file chooser 
             chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS
               , new Parcelable[] { captureIntent });

             // On select image call onActivityResult method of activity
             startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE);

            }
            catch(Exception e){
             Toast.makeText(getBaseContext(), "Exception:"+e, 
               Toast.LENGTH_LONG).show();
            }

           }
     protected void onActivityResult(int requestCode, int resultCode,Intent intent) { 

          if(requestCode==FILECHOOSER_RESULTCODE)  
          {  
              if (requestCode == GALLERY_PICTURE)
                    {
                        if (resultCode == RESULT_OK) 
                        {
                            if (intent != null) 
                            {                   
                                // our BitmapDrawable for the thumbnail
                                BitmapDrawable bmpDrawable = null;

                                // try to retrieve the image using the data from the intent
                                Cursor cursor = getContentResolver().query(intent.getData(), null, null, null, null);

                                if (cursor != null) 
                                {
                                    cursor.moveToFirst();

                                    int idx = cursor.getColumnIndex(ImageColumns.DATA);
                                    String fileSrc = cursor.getString(idx);
                                    Bitmap galleryBitmap = BitmapFactory.decodeFile(fileSrc); // load preview image                                                                         
                                    galleryBitmap = Bitmap.createScaledBitmap(galleryBitmap, 200, 200, true);


                                    String filePath = Environment.getExternalStorageDirectory()
                                    .getAbsolutePath()+"/TimeChat/image/"+System.currentTimeMillis()+".jpg";

                                    //imgCamera.setRotation(0);
                                    imgCamera.setImageBitmap(galleryBitmap);
//                                  writeToFile(filePath, galleryBitmap);
                                } 
                                else 
                                {
                                    bmpDrawable = new BitmapDrawable(getResources(), intent.getData().getPath());
                                    imgCamera.setImageDrawable(bmpDrawable);
                                }
                            } 
                            else 
                            {
                                Toast.makeText(getApplicationContext(), "Cancelled", Toast.LENGTH_SHORT).show();
                            }
                        } 
                        else if (resultCode == RESULT_CANCELED) 
                        {
                            Toast.makeText(getApplicationContext(), "Cancelled", Toast.LENGTH_SHORT).show();
                        }
                    } 
                    else if (requestCode == CAMERA_REQUEST) 
                    {
                        if (resultCode == RESULT_OK) 
                        {
                            if (intent.hasExtra("data"))
                            {                   
                                // retrieve the bitmap from the intent
                                Bitmap cameraBitmap = (Bitmap) intent.getExtras().get("data");

                                    String filePath = Environment.getExternalStorageDirectory()
                                .getAbsolutePath()+"/TimeChat/image/"+System.currentTimeMillis()+".jpg";

                                // update the image view with the bitmap
                                imgCamera.setImageBitmap(cameraBitmap);
                            //  writeToFile(filePath, circleBitmap);

                            } 
                            else if (intent.getExtras() == null) {

                                Toast.makeText(getApplicationContext(), "No extras to retrieve!", Toast.LENGTH_SHORT).show();

                                BitmapDrawable thumbnail = new BitmapDrawable(getResources(), intent.getData().getPath());

                                // update the image view with the newly created drawable
                                imgCamera.setImageDrawable(thumbnail);

                            }

                        } 
                        else if (resultCode == RESULT_CANCELED) {
                            Toast.makeText(getApplicationContext(), "Cancelled", Toast.LENGTH_SHORT).show();
                        }
                    }
          }
         }


    @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
        super.onBackPressed();
        ProfilePhotoActivity.this.finish();
    }

}

共有2个答案

叶建柏
2023-03-14

可以使用请求代码来区分照片的“类型”,即

protected static final int MY_FACE_PHOTO    = 0;
protected static final int MY_CAR_PHOTO     = 1;
protected static final int MY_HOUSE_PHOTO = 2;

在开始新活动之前创建意图时,可以使用< code > intent . put extra(String name,String value),例如:

@NonNls protected static final String STRING_EXTRA = "string_extra";
@NonNls protected static final String CAMERA           = "camera";
@NonNls protected static final String GALLERY          = "gallery";

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Intent galleryIntent  = new Intent(Intent.ACTION_PICK, 
                               MediaStore.Images.Media.EXTERNAL_CONTENT_URI

cameraIntent.putExtra(STRING_EXTRA, CAMERA);
galleryIntent.putExtra(STRING_EXTRA, GALLERY)

startActivityForResult(takePicture, 
                                MY_FACE_PHOTO /* put here your desired request code */)

之后,在< code>onActivityResult()方法中,您可以使用它们:

 protected void onActivityResult (int requestCode, int resultCode, Intent intent) 
 {
   super.onActivityResult(requestCode, resultCode, intent);

    if(intent != null)
    {
       if(resultCode == Activity.RESULT_OK)
       {
          String extraString = intent.getStringExtra(STRING_EXTRA);

           if(extraString.equals(CAMERA))
           {
              // ... i. e.
              switch (requestCode)
              {
                  case MY_FACE_PHOTO:
                  {
                       // ...
                       break;
                  }
                  case MY_CAR_PHOTO:
                  {
                       // ...
                       break;
                  }
                  case MY_HOUSE_PHOTO:
                  {
                      // ...
                      break;
                  }
                  default:
                  {
                      // ...
                      break;
                  }
              } 
           }
           else if(extraString.equals(GALLERY))
           {
              // ...
           }
       }
       else
       {
           // ...
       }
    }
 } 
凤高翰
2023-03-14

这看起来像是一个问题:

 if(requestCode==FILECHOOSER_RESULTCODE)  
          {  
              if (requestCode == GALLERY_PICTURE)

除非FILECHOOSER_RESULTCODE和GALLERY_PICTURE是相同的整数,否则语句永远不会通过。

 类似资料:
  • 一个典型的应用程序应该有一些偏好设置,在每次打开时都能被记住。即使是为这个小范例程序,我们也将想改变正文的字体。 我们将用GSettings 来保存偏好设置,GSettings 需要一个描述我们设置的模式。 <?xml version="1.0" encoding="UTF-8"?> <schemalist> <schema path="/org/gtk/exampleapp/" id="or

  • 我是新手。我知道这个问题已经被问了很多次了,但是到目前为止还没有一个完整的解决方案。我首先开始运行一些没有GUI的代码,通过简单地设置主题,这是成功的。现在,我想添加对话框显示错误从代码,但我不能得到它显示! 因此我创建了一个空视图,其中wrap_content作为宽度和高度,但我不确定应该为活动中的AlertDialog对象使用什么view元素。我在另一个活动中测试了所有的代码,所有的工作都很好

  • 我有一个片段,我有一个listview。当我按下listview position时,我打开片断对话框,在其中我发送所单击项目的位置。在那里,我可以从ListView实时更改一些数据。但是当我改变我的方向(片段和对话框片段都有不同的布局)时,live更改不再起作用。如果我去另一个片段,比回来,改变是做了,但不是活着。 两者都将SetRetaInstance设置为true。 在片段中设置适配器: 对

  • 我试图在Web视图中加载内容时显示progressDialog。完成后,progressDialog将被取消。 我有两个测试设备Android2.3.6和Android4.0。在Android2.3.6中,完全没有问题。对于Android 4.0平板电脑,在显示进度对话框时,点击它将隐藏或删除进度对话框,并使屏幕变为空白。 我的对话有什么问题? 谢谢

  • 我使用MFC和对话框创建了两个独立的可执行文件项目。 我是visual studio的新手,所以请给出一些建议。谢谢

  • 问题内容: 我正在寻找一种样式对话框(使用UI对话框),该样式对话框具有与传统对话框不同的独特CSS,因此从本质上讲,它具有两个外观各异的jQuery对话框。 例如,我已经设置了样式 还有一个 不幸的是,我注意到使用单独的CSS来设置对话框各部分的样式,例如 不起作用,因为没有该类,并且我也不能不插入插件而这样做。 另一种选择是使一个元素具有唯一的类/ id(取决于我想要的类/ id),但是这将阻