簡體   English   中英

如何使用 android 代碼從圖庫中 select 多個圖像並在單個活動中顯示它們?

[英]How to select multiple images from gallery and display them in a single activity using android code?

我正在使用以下代碼對來自畫廊的圖像進行 select 並將它們顯示為單個活動(布局需要包含六個圖像)。 我可以在以下代碼中進行哪些更改?

XML 代碼 activity_second_3.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    tools:context=".Second_Activity3">

    <TextView
        android:id="@+id/text_view_show_uploads"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginStart="30dp"
        android:layout_marginLeft="30dp"
        android:layout_marginEnd="30dp"
        android:layout_marginRight="30dp"
        android:gravity="center"
        android:text="Upload Products Images"
        android:textColor="#f00fff"
        android:textSize="25sp" />

    <Button
        android:id="@+id/button_choose_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/text_view_show_uploads"
        android:layout_marginTop="50dp"
        android:text="Choose file" />

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="231dp"
        android:layout_height="45dp"
        android:layout_below="@id/text_view_show_uploads"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="50dp"
        android:layout_toEndOf="@+id/button_choose_image"
        android:layout_toRightOf="@+id/button_choose_image" />

    <ImageView
        android:id="@+id/image_view1"
        android:layout_width="180dp"
        android:layout_height="160dp"
        android:layout_above="@id/progress_bar"
        android:layout_below="@id/spinner2"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="12dp"
        android:layout_marginEnd="210dp"
        android:layout_marginRight="210dp"
        android:layout_marginBottom="331dp" />

    <ImageView
        android:id="@+id/image_view2"
        android:layout_width="180dp"
        android:layout_height="160dp"
        android:layout_above="@id/progress_bar"
        android:layout_below="@id/spinner2"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="172dp"
        android:layout_marginEnd="210dp"
        android:layout_marginRight="210dp"
        android:layout_marginBottom="168dp" />

    <ImageView
        android:id="@+id/image_view3"
        android:layout_width="180dp"
        android:layout_height="160dp"
        android:layout_above="@id/progress_bar"
        android:layout_below="@id/spinner2"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="335dp"
        android:layout_marginEnd="210dp"
        android:layout_marginRight="210dp"
        android:layout_marginBottom="5dp" />

    <ImageView
        android:id="@+id/image_view4"
        android:layout_width="180dp"
        android:layout_height="160dp"
        android:layout_above="@id/progress_bar"
        android:layout_below="@id/spinner2"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="12dp"
        android:layout_marginEnd="-2dp"
        android:layout_marginRight="-2dp"
        android:layout_marginBottom="331dp" />

    <ImageView
        android:id="@+id/image_view5"
        android:layout_width="180dp"
        android:layout_height="160dp"
        android:layout_above="@id/progress_bar"
        android:layout_below="@id/spinner2"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="172dp"
        android:layout_marginEnd="-2dp"
        android:layout_marginRight="-2dp"
        android:layout_marginBottom="168dp" />

    <ImageView
        android:id="@+id/image_view6"
        android:layout_width="180dp"
        android:layout_height="160dp"
        android:layout_above="@id/progress_bar"
        android:layout_below="@id/spinner2"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="335dp"
        android:layout_marginEnd="-2dp"
        android:layout_marginRight="-2dp"
        android:layout_marginBottom="5dp" />

    <ProgressBar
        android:id="@+id/progress_bar"
        style="@style/Widget.AppCompat.ProgressBar.Horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/button_upload"
        android:layout_marginBottom="16dp" />
    <Button
        android:id="@+id/button_upload"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="Upload" />   

</RelativeLayout>

Second_Activity3.java:

package com.example.project1;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.content.ClipData;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Spinner;
import android.widget.Toast;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.squareup.picasso.Picasso;

import java.util.List;

public class Second_Activity3 extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
    Button mButtonChooseImage;
    List <String> list_of_products;
    Spinner spino;
    ImageView mImageView1;
    ImageView mImageView2;
    ImageView mImageView3;
    ImageView mImageView4;
    ImageView mImageView5;
    ImageView mImageView6;
    ProgressBar mProgressBar;
    Uri mImageUri;
    Button mButtonUpload;
    StorageReference mStorageRef;
    DatabaseReference mDatabaseRef;
    private static final String TAG = "MainActivity";
    private static final int PICK_IMAGE_REQUEST = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second_3);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        mButtonChooseImage = findViewById(R.id.button_choose_image);
        mButtonChooseImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openFileChooser();
            }
        });
        mImageView1 = findViewById(R.id.image_view1);
        mImageView2 = findViewById(R.id.image_view2);
        mImageView3 = findViewById(R.id.image_view3);
        mImageView4 = findViewById(R.id.image_view4);
        mImageView5 = findViewById(R.id.image_view5);
        mImageView6 = findViewById(R.id.image_view6);

        mButtonUpload = findViewById(R.id.button_upload);
        mProgressBar = findViewById(R.id.progress_bar);
        mStorageRef = FirebaseStorage.getInstance().getReference("products");
        mDatabaseRef = FirebaseDatabase.getInstance().getReference("products");
    }    // Performing action when ItemSelected     // from spinner, Overriding onItemSelected method
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {        // On selecting a spinner item
        String item = parent.getItemAtPosition(position).toString();        // Showing selected spinner item
        Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show();
    }
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub
    }
    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
    private void openFileChooser() {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(intent, PICK_IMAGE_REQUEST);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        List<Uri> uris = null;
        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
                && data != null && data.getData() != null) {
            ClipData clipdata = data.getClipData();
            for (int i=0; i<clipdata.getItemCount();i++)
            {
                uris.add(clipdata.getItemAt(i).getUri());
            }
//            mImageUri = data.getData();
            Picasso.with(this).load(uris.get(0)).into(mImageView1);
            Picasso.with(this).load(uris.get(1)).into(mImageView2);
            Picasso.with(this).load(uris.get(2)).into(mImageView3);
            Picasso.with(this).load(uris.get(3)).into(mImageView4);
            Picasso.with(this).load(uris.get(4)).into(mImageView5);
            Picasso.with(this).load(uris.get(5)).into(mImageView6);

        }


    }
}

目前,上述代碼能夠 select 多個圖像,因為我使用了 intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); android 代碼中的行。 在這里,只需要六張圖片 select。

我怎么能 select 並顯示多個圖像?

我非常感謝您建議我獲取選定圖像的多個 Uri。

uris object 沒有被創建,它只是在上面的代碼中聲明為:

uris = new ArrayList<Uri>();

我不明白確切的問題是什么,但以下代碼能夠滿足我的要求:

package com.example.project1;

import androidx.appcompat.app.AppCompatActivity;
import android.content.ClipData;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Spinner;
import android.widget.Toast;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.squareup.picasso.Picasso;

import java.util.ArrayList;
import java.util.List;

public class Second_Activity3 extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
    Button mButtonChooseImage;
    List <String> list_of_products;
    Spinner spino;
    ImageView mImageView1;
    ImageView mImageView2;
    ImageView mImageView3;
    ImageView mImageView4;
    ImageView mImageView5;
    ImageView mImageView6;
    ProgressBar mProgressBar;
    Uri mImageUri;
    List<Uri> uris = null;
    Button mButtonUpload;
    StorageReference mStorageRef;
    DatabaseReference mDatabaseRef;
    private static final String TAG = "MainActivity";
    private static final int PICK_IMAGE_REQUEST = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second_3);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        mButtonChooseImage = findViewById(R.id.button_choose_image);
        mButtonChooseImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openFileChooser();
            }
        });

        uris = new ArrayList<Uri>();

        mImageView1 = findViewById(R.id.image_view1);
        mImageView2 = findViewById(R.id.image_view2);
        mImageView3 = findViewById(R.id.image_view3);
        mImageView4 = findViewById(R.id.image_view4);
        mImageView5 = findViewById(R.id.image_view5);
        mImageView6 = findViewById(R.id.image_view6);

        mButtonUpload = findViewById(R.id.button_upload);
        mProgressBar = findViewById(R.id.progress_bar);
        mStorageRef = FirebaseStorage.getInstance().getReference("products");
        mDatabaseRef = FirebaseDatabase.getInstance().getReference("products");
    }    // Performing action when ItemSelected     // from spinner, Overriding onItemSelected method
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {        // On selecting a spinner item
        String item = parent.getItemAtPosition(position).toString();        // Showing selected spinner item
        Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show();
    }
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub
    }
//    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
    private void openFileChooser() {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(intent, PICK_IMAGE_REQUEST);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

//        if (data.getClipData() != null) {
            ClipData clipdata = data.getClipData();
            for (int i=0; i<clipdata.getItemCount();i++)
            {
                uris.add(clipdata.getItemAt(i).getUri());
                System.out.println("URL: "+clipdata.getItemAt(i).getUri());
            }
//            mImageUri = data.getData();
            Picasso.with(this).load(uris.get(0)).into(mImageView1);
            Picasso.with(this).load(uris.get(1)).into(mImageView2);
            Picasso.with(this).load(uris.get(2)).into(mImageView3);
            Picasso.with(this).load(uris.get(3)).into(mImageView4);
            Picasso.with(this).load(uris.get(4)).into(mImageView5);
            Picasso.with(this).load(uris.get(5)).into(mImageView6);

//        }


    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM