java - 如何从图库中选择多个图像并使用 android 代码在单个活动中显示它们?
问题描述
我正在使用以下代码从图库中选择图像并将它们显示到单个活动中(布局需要包含六个图像)。我可以在以下代码中进行哪些更改?
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);
}
}
}
目前,上面的代码可以选择多个图像,因为我使用了 intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); android代码中的行。在这里,只需要选择六张图像。
如何选择并显示多个图像?
解决方案
我非常感谢您建议我获取选定图像的多个 Uri。
uris 对象没有被创建,它只是在上面的代码中声明为:
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);
// }
}
}
推荐阅读
- ruby-on-rails - 如何将字符串化 JSON 数组解包/转换为普通 JSON 数组
- javascript - Javascript 音频在前 3 次点击中不播放,从第 4 次点击开始播放没有任何问题,可能是什么问题?
- python - 如何删除停用词之前出现的所有单词
- javascript - Javascript以小时为单位查找时区的时差
- php - 如何在 CakePHP 3 中访问 GET url 的最后一部分
- c# - 为什么使用 C# 创建 *.gz 文件后会得到损坏的文件?
- android - Android UI 测试 - ActivityScenarioRule 比 ActivityScenario 慢得多
- android - Android 12 的模拟器预览没有连接
- django - 社交网络登录失败 django allauth 不和谐
- spring-integration - AUTHENTICATIONFAILED 上的 ImapIdleChannelAdapter 无限循环