如何在特定的imageView上上传特定的图像点击来自android中的画廊和相机

Posted

技术标签:

【中文标题】如何在特定的imageView上上传特定的图像点击来自android中的画廊和相机【英文标题】:How to upload particular image on particular imageView click from gallery and camera in android 【发布时间】:2017-12-10 11:04:29 【问题描述】:

我有 4 个不同的图像视图,并尝试单击所有以上传不同的图像,如 LIcence、Rc、Profile 等。我想从画廊或相机对话框上传图像.. 像this 布局。 比如上层布局示例

【问题讨论】:

***.com/questions/5309190/… take picture from camera and choose from gallery and display in Image view的可能重复 发布您的代码.. 我有 4 个 imageview 并尝试单击所有 imageview 以绑定不同的图像,例如来自画廊 @JaydeepPatel 的 caemra 的许可证、Rc、个人资料图片 我有 4 个图像视图并尝试单击所有图像视图以绑定不同的图像,例如来自画廊 @DarshanKachhadiya 的 caemra 的许可证、Rc、个人资料图片 【参考方案1】:

请查看我更新的答案。这只是一个例子。希望你能从中理解

  ImageView profile_pic;
    private static final int SELECT_PICTURE1 = 100;
    private static final int SELECT_PICTURE2 = 101;
    private static final int SELECT_PICTURE3 = 102;
    private static final int SELECT_PICTURE4 = 103;





picture1 = (ImageView) view.findViewById(R.id.picture1);
picture2 = (ImageView) view.findViewById(R.id.picture2);
picture3 = (ImageView) view.findViewById(R.id.picture3);
picture4 = (ImageView) view.findViewById(R.id.picture4);
picture1.setOnClickListener(this);
picture2.setOnClickListener(this);
picture3.setOnClickListener(this);
picture4.setOnClickListener(this);







@Override
    public void onClick(View v) 
        if (v.getId() == R.id.picture1) 
             Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE1);
        

         if (v.getId() == R.id.picture2) 
             Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE2);
        
         if (v.getId() == R.id.picture3) 
             Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE3);
        

         if (v.getId() == R.id.picture4) 
             Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE4);
        


    




@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) 

    if (resultCode == RESULT_OK) 
        if (requestCode == SELECT_PICTURE1) 
            Uri selectedImageUri = data.getData();
            if (null != selectedImageUri) 
                String path = selectedImageUri.getPath();
                Log.e("image path", path + "");
                pricture1.setImageURI(selectedImageUri);
            
         

        if (requestCode == SELECT_PICTURE2) 
            Uri selectedImageUri = data.getData();
            if (null != selectedImageUri) 
                String path = selectedImageUri.getPath();
                Log.e("image path", path + "");
                picture2.setImageURI(selectedImageUri);
            
         

        if (requestCode == SELECT_PICTURE3) 
            Uri selectedImageUri = data.getData();
            if (null != selectedImageUri) 
                String path = selectedImageUri.getPath();
                Log.e("image path", path + "");
                picture3.setImageURI(selectedImageUri);
            
         

        if (requestCode == SELECT_PICTURE4) 
            Uri selectedImageUri = data.getData();
            if (null != selectedImageUri) 
                String path = selectedImageUri.getPath();
                Log.e("image path", path + "");
                picture4.setImageURI(selectedImageUri);
            
         
    

【讨论】:

我有 4 个 imageview 并尝试单击所有 imageview 以绑定不同的图像,如许可证、Rc、来自画廊 caemra 的个人资料图片 schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_ android:layout_> 请参阅布局图片@paras 可以为不同的按钮声明不同的代码。然后 startActivityForResult 并传递代码。然后检查返回的代码并将图像设置在不同的图像视图上。就像我只为相机使用了一个按钮,为画廊使用了一个按钮。 忘记按钮,我想单击每个图像视图并从相机或画廊中选择图像并设置图像视图单击的图像视图***.com/users/8091876/paras-watts【参考方案2】:
 private void imageBrowse() 
if(camera)
 Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
            startActivityForResult(cameraIntent, CAMERA_REQUEST); 
else
    Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    // Start the Intent
    startActivityForResult(galleryIntent, PICK_IMAGE_REQUEST);



 public void onActivityResult(int requestCode, int resultCode, Intent data) 
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) 

        if(requestCode == PICK_IMAGE_REQUEST)
            Uri picUri = data.getData();

            filePath = getPath(picUri);
            uri =picUri;
            Log.d("picUri", picUri.toString());
            Log.d("filePath", filePath);

            imageView.setImageURI(picUri);

        

  if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK)   
        Bitmap photo = (Bitmap) data.getExtras().get("data"); 
        imageView.setImageBitmap(photo);
      

    


【讨论】:

当点击第二个图像视图以绑定来自相机和画廊活动的图像时结果给出错误 我有 4 个 imageview 并尝试单击所有 imageview 以绑定不同的图像,如来自画廊 caemra 的许可证、Rc、Profile pic 请参阅布局图片@Darshan Kachhadiya【参考方案3】:

编辑 由于您使用的是 recyclerview 或 listview 类型的视图,因此您可以将标签与每个视图持有者相关联,然后使用该标签来解析 imageview。现在您可以根据视图中的位置获取唯一标签。例如,在 recyclerview 中,您可以使用 getAdapterPosition()。

将每个图像视图的 OnClicks 与请求代码相关联。在 onActivityResult 中解决它们并相应地放置图像。

【讨论】:

我正在尝试这个但没有得到结果请维护部分代码。谢谢 我有 4 个 imageview 并尝试单击所有 imageview 以绑定不同的图像,如来自画廊 caemra 的许可证、Rc、Profile pic【参考方案4】:

我想建议参考这个网站,它的实现简单直接......

http://www.coderzheaven.com/2012/04/20/select-an-image-from-gallery-in-android-and-show-it-in-an-imageview/

【讨论】:

【参考方案5】:

除了@paras 的完美回答,如果有人还想包含相机选项,请参考以下步骤:

    添加一个对话框,在点击图片时弹出并要求选择相机或图库:

    final CharSequence[] items = "Camera", "Gallery", "Cancel";
    
    AlertDialog.Builder builder = new AlertDialog.Builder(PhotoActivity.this);
    builder.setTitle("Add Photo!");
    builder.setItems(items, new DialogInterface.OnClickListener() 
        @Override
        public void onClick(DialogInterface dialog, int item) 
            if (items[item].equals("Camera")) 
                openCamera();
             else if (items[item].equals("Gallery")) 
                openGallery();
             else if (items[item].equals("Cancel")) 
                dialog.dismiss();
            
        
    );
    builder.show();
    

    使用此方法打开相机意图:

    private void openCamera() 
        Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(cameraIntent, REQUEST_CAMERA);
    
    

    现在在onActivityResult() 方法中,包含这个来检查意图是否来自相机:

    if (requestCode == REQUEST_CAMERA) 
        Bundle bundle = data.getExtras();
        final Bitmap bitmap = (Bitmap) Objects.requireNonNull(bundle).get("data");
        imageView.setImageBitmap(bitmap);
    
    

【讨论】:

以上是关于如何在特定的imageView上上传特定的图像点击来自android中的画廊和相机的主要内容,如果未能解决你的问题,请参考以下文章

如何将按钮放置在图像视图中的特定坐标处

将图像从 imageview 上传到 Firebase Android

来自 Android 的 Instagram 在特定用户上打开并为上传的图像添加标题

如何在 Phocagallery - Joomla 中显示特定用户上传的图像?

如何在特定文件夹中的 iCloud 上传图像并在目标 C 中以编程方式访问该特定文件夹

如何从imageview中的png获取特定颜色的所有像素