【问题标题】:Android: put image into selected ImageViewAndroid:将图像放入选定的 ImageView
【发布时间】:2017-06-13 07:02:39
【问题描述】:

这个问题只是关于设计问题。我将不胜感激。

基本上我有 6 个不同的 ImageView,它们都连接到名为 onImageViewClicked 的同一个方法,该方法将检查 6 个 ImageView 中的哪一个被点击,并启动 Gallery intent 从图库中挑选一张照片。

现在我的问题是......画廊意图的结果来自onActivityResult 方法,但是从那里,如何将照片分配给选定的 ImageView???......这里的代码:

选择 ImageView 并启动 Gallery 的方法 onImageViewClicked:

private void onImageViewClicked(View v){

        switch (v.getId()){
            case R.id.imgvW_1:
                //something here
                break;
            case R.id.imgvW_2:
                //something here
                break;
            case R.id.imgvW_3:
                //something here
                break;
            case R.id.imgvW_4:
                //something here
                break;
            case R.id.imgvW_5:
                //something here
                break;
            case R.id.imgvW_6:
                //something here
                break;

        }

        Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
        startActivityForResult(gallery, PICK_IMAGE);
    }

方法onActivityResult从Intent获取结果:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == PICK_IMAGE){
            imageUri = data.getData();
            //how to assign here the image to the clickedImageView?????????
        }
    }

---- 编辑---- 谢谢大家的回答。 Ramees、Hardik Maru、Mohammed Atif 和 Luca Rossi 的所有 4 个答案对我来说都很好,所以......他们中的任何一个都比其他人更方便吗??

【问题讨论】:

  • 尝试在onImageViewClicked 中设置一个标志并在onActivityResult 中使用它来识别点击了哪个ImageView
  • 感谢@JeffreyRajan...但我恐怕我的朋友可能需要一个稍微扩展的答案....

标签: android android-intent imageview


【解决方案1】:

在你的代码顶部初始化一个 ImageView

ImageView temp_image;

你的 onImageViewClicked 会变成

 case R.id.imgvW_1:
            temp_image = imgvW_1
            break;
case R.id.imgvW_2:
            temp_image = imgvW_2
            break;

最后在 onActivityResult 方法中使用下面的代码

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK && requestCode == PICK_IMAGE){
        imageUri = data.getData();

       temp_image.setbackground(...);// or setbitmap based on what type you have
    }
}

【讨论】:

    【解决方案2】:

    先创建一个成员变量

    private ImageView clickedImage;
    

    然后在您的点击监听器中

    private void onImageViewClicked(View v){
        //assuming that this method will be called only from ImageView
        this.clickedImage = (ImageView) v;
        Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
        startActivityForResult(gallery, PICK_IMAGE);
    }
    

    然后在你的活动结果中

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == PICK_IMAGE){
            imageUri = data.getData();
            //use Glide to pass the uri and load image in clickedImage or
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
            if(clickedImage != null){
                 clickedImage.setBitmapDrawable(bitmap);
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      一个简单的选择是为每个图像使用不同的请求代码,例如

      1. R.id.imgvW_1 -> PICK_IMAGE_1 = 100
      2. R.id.imgvW_2 -> PICK_IMAGE_2 = 101
      3. ecc

      然后在你的 onActivityResult 上检查它


      编辑:

      通过使用视图 ID 作为请求代码,您可以更快地做到这一点

      private void onImageViewClicked(View v){
      
              switch (v.getId()){
                  case R.id.imgvW_1:
                  case R.id.imgvW_2:
                  case R.id.imgvW_3:
                  case R.id.imgvW_4:
                  case R.id.imgvW_5:
                  case R.id.imgvW_6:
              Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
              startActivityForResult(gallery, v.getId());
                      break;
      
              }
          }
      
      @Override
          protected void onActivityResult(int requestCode, int resultCode, Intent data) {
              super.onActivityResult(requestCode, resultCode, data);
              if (resultCode == RESULT_OK){
                  imageUri = data.getData();
                  switch (requestCode){
                      case R.id.imgvW_1:
                      case R.id.imgvW_2:
                      case R.id.imgvW_3:
                      case R.id.imgvW_4:
                      case R.id.imgvW_5:
                      case R.id.imgvW_6:
                       load image to request code imageview
                      break;
              }
          }
      

      【讨论】:

      • 此答案不涉及在您的活动中存储临时变量,这是主要优势;但是如果您在该活动中使用其他一些请求代码,则使用“已编辑”版本可能会远程导致 requestCode 并发问题
      【解决方案4】:

      通过在onImageViewClicked 方法中设置标志来尝试。使用以下代码

      private String flag = "";    
      
      private void onImageViewClicked(View v){
      
                  switch (v.getId()){
                      case R.id.imgvW_1:
                          flag="image1"  
                          //something here
                          break;
                      case R.id.imgvW_2:
                           flag="image2"
                          //something here
                          break;
                      case R.id.imgvW_3:
                          flag="image3"
                          //something here
                          break;
                      case R.id.imgvW_4:
                          flag="image4"
                          //something here
                          break;
                      case R.id.imgvW_5:
                           flag="image5"
                          //something here
                          break;
                      case R.id.imgvW_6:
                          flag="image6"
                          //something here
                          break;
      
                  }
      
                  Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
                  startActivityForResult(gallery, PICK_IMAGE);
              }
      

      onActivityResult

      @Override
          protected void onActivityResult(int requestCode, int resultCode, Intent data) {
              super.onActivityResult(requestCode, resultCode, data);
              if (resultCode == RESULT_OK && requestCode == PICK_IMAGE){
                  imageUri = data.getData();
                  if(flag.equalsIgnoreCase("image1")){
                     Picasso.with(context).load(imageUri).into(R.id.imageView);
                  }
              }
          }
      

      【讨论】:

        【解决方案5】:

        您可以使用 Picasso lib 将图像加载到 ImageView 中。

        这是您可以用来加载图像的代码行:

        Picasso.with(context).load(imageUri/path).into(R.id.imageView);
        

        这里是毕加索的链接:https://github.com/square/picasso

        以下是跟踪将使用哪个 imageView 来显示图像的代码:

        long idToUse;
        
        private void onImageViewClicked(View v){
        
            switch (v.getId()){
                case R.id.imgvW_1:
                    idToUse = R.id.imgvW_1;
                    break;
                case R.id.imgvW_2:
                    idToUse = R.id.imgvW_2;
                    break;
                case R.id.imgvW_3:
                    idToUse = R.id.imgvW_3;
                    break;
                case R.id.imgvW_4:
                    idToUse = R.id.imgvW_4;
                    break;
                case R.id.imgvW_5:
                    idToUse = R.id.imgvW_5;
                    break;
                case R.id.imgvW_6:
                    idToUse = R.id.imgvW_6;
                    break;
        
            }
        
            Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
            startActivityForResult(gallery, PICK_IMAGE);
        }
        

        然后您可以在 Picasso 语句中使用 idToUse 作为 id。像这样:

        Picasso.with(context).load(imageUri/path).into(idToUse);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-04
          • 1970-01-01
          • 2021-09-20
          • 1970-01-01
          相关资源
          最近更新 更多