Android 如何使用毕加索和安卓工作室将图像加载到安卓应用程序中
我正在尝试将一个图像从URL加载到我的android应用程序中Android 如何使用毕加索和安卓工作室将图像加载到安卓应用程序中,android,android-studio,picasso,Android,Android Studio,Picasso,我正在尝试将一个图像从URL加载到我的android应用程序中 ImageView img = (ImageView)view.findViewById(R.id.itemPicture); String url = "https://storage.cloud.google.com/artifactory-images/old_fashioned_ring.PNG" Picasso.get().load(url).resize(50, 50).centerCrop().into(img);
ImageView img = (ImageView)view.findViewById(R.id.itemPicture);
String url = "https://storage.cloud.google.com/artifactory-images/old_fashioned_ring.PNG"
Picasso.get().load(url).resize(50, 50).centerCrop().into(img);
下面是我正在使用的XML代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iconProfilePicture"
android:layout_width="wrap_content"
android:layout_height="46dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:contentDescription="@string/icon_of_user"
app:layout_constraintBottom_toTopOf="@id/itemPicture"
app:layout_constraintEnd_toStartOf="@+id/username"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/ic_launcher_round" />
<ImageView
android:id="@+id/itemPicture"
android:layout_width="0dp"
android:layout_height="500dp"
android:contentDescription="@string/image_of_artifact"
android:cropToPadding="false"
android:scaleType="centerCrop"
app:layout_constraintBottom_toTopOf="@id/textViewTitle"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iconProfilePicture"
app:srcCompat="@mipmap/ic_launcher_round" />
<TextView
android:id="@+id/username"
android:layout_width="0dp"
android:layout_height="19dp"
android:layout_marginEnd="50dp"
android:layout_marginRight="50dp"
android:text="@string/sample_username"
app:layout_constraintBottom_toTopOf="@+id/itemPicture"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/iconProfilePicture"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textViewTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingLeft="15dp"
android:paddingTop="0dp"
android:paddingRight="15dp"
android:paddingBottom="0dp"
android:text="@string/sample_text"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/textViewDescription"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/itemPicture" />
<TextView
android:id="@+id/textViewDescription"
android:layout_width="0dp"
android:layout_height="146dp"
android:paddingLeft="15dp"
android:paddingTop="8dp"
android:paddingRight="15dp"
android:paddingBottom="8dp"
android:text="@string/sample_description"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/textViewTitle" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
以下是完整片段:
package com.example.themanbuns.fragments;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.example.themanbuns.activities.MainActivity;
import com.example.themanbuns.data.Item;
import com.example.themanbuns.R;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.tabs.TabLayout;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.Map;
public class ItemsFragment extends Fragment {
public static final int CARD_VIEW = 0;
public static final int LIST_VIEW = 1;
public static final int NUM_TABS = 2;
public static final int MY_ITEMS_POS = 0;
public static final int ITEMS_SHARED_WITH_ME_POS = 1;
private ItemsTabFragment myItemsFragment;
private ItemsTabFragment sharedItemsFragment;
private ItemsPagerAdapter itemsPagerAdapter;
private ViewPager viewPager;
private TabLayout tabLayout;
private ArrayList<Item> myItems; // items stored in ArrayList
private ArrayList<Item> itemsSharedWithMe;
private ArrayList<ImageView> myImages;
private View view;
private Menu itemsMenu;
private int itemDisplayType;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_items, container, false);
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setHasOptionsMenu(true);
createItems(); // this is the example created
setupItemTabs(); // this handles the two tabs at top: my items and items shared with me
itemDisplayType = ((MainActivity) getActivity()).getItemDisplayType(); // this sets list or card view (when you go to options view type)
}
// this handles the two tabs at top: my items and items shared with me
private void setupItemTabs() {
itemsPagerAdapter = new ItemsPagerAdapter(getChildFragmentManager());
viewPager = view.findViewById(R.id.viewPager);
viewPager.setAdapter(itemsPagerAdapter);
tabLayout = view.findViewById(R.id.tabLayout);
tabLayout.setupWithViewPager(viewPager);
}
public class ItemsPagerAdapter extends FragmentPagerAdapter {
public ItemsPagerAdapter(FragmentManager fragmentManager) {
super (fragmentManager, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
// this generates my items and shared items
@Override
public Fragment getItem(int position) {
switch (position) {
case MY_ITEMS_POS:
myItemsFragment = new ItemsTabFragment(myItems, View.VISIBLE, itemDisplayType);
return myItemsFragment;
case ITEMS_SHARED_WITH_ME_POS:
sharedItemsFragment = new ItemsTabFragment(itemsSharedWithMe, View.GONE, itemDisplayType);
return sharedItemsFragment;
default:
throw new RuntimeException();
}
}
@Override
public int getCount() {
return NUM_TABS;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case MY_ITEMS_POS:
return getString(R.string.my_items);
case ITEMS_SHARED_WITH_ME_POS:
return getString(R.string.items_shared_with_me);
default:
throw new RuntimeException();
}
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.options_menu_items_fragment, menu);
itemsMenu = menu;
switch (itemDisplayType) {
case CARD_VIEW:
itemsMenu.findItem(R.id.cardView).setChecked(true);
itemsMenu.findItem(R.id.listView).setChecked(false);
changeLayoutType(itemDisplayType);
break;
case LIST_VIEW:
itemsMenu.findItem(R.id.cardView).setChecked(false);
itemsMenu.findItem(R.id.listView).setChecked(true);
changeLayoutType(itemDisplayType);
break;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.cardView:
item.setChecked(true);
itemsMenu.findItem(R.id.listView).setChecked(false);
changeLayoutType(CARD_VIEW);
return true;
case R.id.listView:
item.setChecked(true);
itemsMenu.findItem(R.id.cardView).setChecked(false);
changeLayoutType(LIST_VIEW);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
// this sets list or card view (when you go to options view type)
public void changeLayoutType(int displayType) {
itemDisplayType = displayType;
((MainActivity) getActivity()).setItemDisplayType(displayType);
if ((myItemsFragment != null) && (sharedItemsFragment != null)) {
myItemsFragment.setLayoutType(displayType);
sharedItemsFragment.setLayoutType(displayType);
}
}
// example items displayed
public void createItems() {
myItems = new ArrayList<Item>();
itemsSharedWithMe = new ArrayList<Item>();
((MainActivity) getActivity()).getFirebaseFirestore().collection("items")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
if (document.getId().equals("lachie")) {
addToMyItems(document.getData());
String imageUrl = document.getData().get("image").toString();
ImageView img = (ImageView)view.findViewById(R.id.itemPicture);
String url = "https://storage.cloud.google.com/artifactory-images/old_fashioned_ring.PNG";
Picasso.get().load(url).resize(50, 50).centerCrop().into(img);
}
}
} else {
System.out.println("failure");
}
}
});
}
public void addToMyItems(Map<String, Object> item) {
String name = item.get("name").toString();
String description = item.get("description").toString();
String image = item.get("image").toString();
myItems.add(new Item(name, description, image));
myItemsFragment.notifyDataSetChanged();
}
public void addToSharedItems(Item item) {
itemsSharedWithMe.add(item);
}
package com.example.themanbuns.fragments;
导入android.content.SharedReferences;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.Menu;
导入android.view.MenuInflater;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageView;
导入androidx.annotation.NonNull;
导入androidx.annotation.Nullable;
导入androidx.fragment.app.fragment;
导入androidx.fragment.app.FragmentManager;
导入androidx.fragment.app.FragmentPagerAdapter;
导入androidx.viewpager.widget.viewpager;
导入com.example.themanbuns.activities.main活动;
导入com.example.themanbuns.data.Item;
导入com.example.themanbuns.R;
导入com.google.android.gms.tasks.OnCompleteListener;
导入com.google.android.gms.tasks.Task;
导入com.google.android.material.tabs.TabLayout;
导入com.google.firebase.firestore.QueryDocumentSnapshot;
导入com.google.firebase.firestore.QuerySnapshot;
导入com.squareup.picasso.picasso;
导入java.util.ArrayList;
导入java.util.Map;
公共类ItemsFragment扩展了片段{
公共静态最终int卡\u视图=0;
公共静态最终整数列表\u视图=1;
公共静态最终int NUM_TABS=2;
公共静态最终int MY_ITEMS_POS=0;
公共静态最终整型项目\u与\u ME\u POS=1共享\u;
私有项StabFragment myItemsFragment;
私有项StabFragment sharedItemsFragment;
私人项目SPAGERAAdapter项目SPAGERAAdapter;
私人视页机视页机;
私人摊位摊位;
私有ArrayList myItems;//存储在ArrayList中的项目
与我共享的私人ArrayList项目;
私有ArrayList myImages;
私人视野;
私人菜单项菜单;
私有int itemsplayType;
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment_项目,容器,错误);
返回视图;
}
@凌驾
已创建公用void onview(@NonNull视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
设置选项菜单(真);
createItems();//这是创建的示例
setupItemTabs();//这将处理顶部的两个选项卡:我的项目和与我共享的项目
itemDisplayType=((MainActivity)getActivity()).getItemDisplayType();//此设置列表或卡片视图(当您转到选项视图类型时)
}
//这将处理顶部的两个选项卡:“我的项目”和“与我共享的项目”
私有void setupItemTabs(){
itemsPagerAdapter=newitemspageradapter(getChildFragmentManager());
viewPager=view.findViewById(R.id.viewPager);
viewPager.setAdapter(itemsPagerAdapter);
tabLayout=view.findviewbyd(R.id.tabLayout);
tabLayout.setupWithViewPager(viewPager);
}
公共类ItemsPagerAdapter扩展了FragmentPagerAdapter{
公共项碎片适配器(碎片管理器碎片管理器){
超级(碎片管理器,碎片页面编辑器。行为\恢复\仅\当前\碎片);
}
//这将生成我的项目和共享项目
@凌驾
公共片段getItem(int位置){
开关(位置){
案例我的项目位置:
myItemsFragment=新的ItemsTabFragment(myItems,View.VISIBLE,itemDisplayType);
返回myItemsFragment;
与我共享的案例项目:
sharedItemsFragment=new ItemsStabFragment(itemsSharedWithMe,View.GONE,itemDisplayType);
返回sharedItemsFragment;
违约:
抛出新的RuntimeException();
}
}
@凌驾
public int getCount(){
返回NUM_标签;
}
@可空
@凌驾
公共字符序列getPageTitle(int位置){
开关(位置){
案例我的项目位置:
返回getString(R.string.my_items);
与我共享的案例项目:
返回getString(R.string.items\u与我共享的\u);
违约:
抛出新的RuntimeException();
}
}
}
@凌驾
创建选项菜单(菜单菜单,菜单充气机){
super.onCreateOptions菜单(菜单,充气机);
充气机。充气(右菜单。选项菜单项目,菜单);
itemsMenu=菜单;
开关(itemDisplayType){
案例卡片视图:
itemsMenu.findItem(R.id.cardView).setChecked(true);
itemsMenu.findItem(R.id.listView).setChecked(false);
changeLayoutType(itemDisplayType);
打破
案例列表视图:
itemsMenu.findItem(R.id.cardView).setChecked(false);
itemsMenu.findItem(R.id.listView).setChecked(true);
changeLayoutType(itemDisplayType);
打破
}
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例R.id.cardView:
item.setChecked(真);
itemsMenu.findItem(R.id.listView).setChecked(false);
changeLayoutType(卡片视图);
返回true;
案例R.id.listView:
item.setChecked(真);
itemsMenu.findItem(R.id.cardView).setChecked(false);
changeLayoutType(列表视图);
返回true;
违约:
返回super.onOptionsItemSelected(项目);
}
}
//这将设置列表或卡片视图(当您转到op时
package com.example.themanbuns.fragments;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.example.themanbuns.activities.MainActivity;
import com.example.themanbuns.data.Item;
import com.example.themanbuns.R;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.tabs.TabLayout;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.Map;
public class ItemsFragment extends Fragment {
public static final int CARD_VIEW = 0;
public static final int LIST_VIEW = 1;
public static final int NUM_TABS = 2;
public static final int MY_ITEMS_POS = 0;
public static final int ITEMS_SHARED_WITH_ME_POS = 1;
private ItemsTabFragment myItemsFragment;
private ItemsTabFragment sharedItemsFragment;
private ItemsPagerAdapter itemsPagerAdapter;
private ViewPager viewPager;
private TabLayout tabLayout;
private ArrayList<Item> myItems; // items stored in ArrayList
private ArrayList<Item> itemsSharedWithMe;
private ArrayList<ImageView> myImages;
private View view;
private Menu itemsMenu;
private int itemDisplayType;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_items, container, false);
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setHasOptionsMenu(true);
createItems(); // this is the example created
setupItemTabs(); // this handles the two tabs at top: my items and items shared with me
itemDisplayType = ((MainActivity) getActivity()).getItemDisplayType(); // this sets list or card view (when you go to options view type)
}
// this handles the two tabs at top: my items and items shared with me
private void setupItemTabs() {
itemsPagerAdapter = new ItemsPagerAdapter(getChildFragmentManager());
viewPager = view.findViewById(R.id.viewPager);
viewPager.setAdapter(itemsPagerAdapter);
tabLayout = view.findViewById(R.id.tabLayout);
tabLayout.setupWithViewPager(viewPager);
}
public class ItemsPagerAdapter extends FragmentPagerAdapter {
public ItemsPagerAdapter(FragmentManager fragmentManager) {
super (fragmentManager, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
// this generates my items and shared items
@Override
public Fragment getItem(int position) {
switch (position) {
case MY_ITEMS_POS:
myItemsFragment = new ItemsTabFragment(myItems, View.VISIBLE, itemDisplayType);
return myItemsFragment;
case ITEMS_SHARED_WITH_ME_POS:
sharedItemsFragment = new ItemsTabFragment(itemsSharedWithMe, View.GONE, itemDisplayType);
return sharedItemsFragment;
default:
throw new RuntimeException();
}
}
@Override
public int getCount() {
return NUM_TABS;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case MY_ITEMS_POS:
return getString(R.string.my_items);
case ITEMS_SHARED_WITH_ME_POS:
return getString(R.string.items_shared_with_me);
default:
throw new RuntimeException();
}
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.options_menu_items_fragment, menu);
itemsMenu = menu;
switch (itemDisplayType) {
case CARD_VIEW:
itemsMenu.findItem(R.id.cardView).setChecked(true);
itemsMenu.findItem(R.id.listView).setChecked(false);
changeLayoutType(itemDisplayType);
break;
case LIST_VIEW:
itemsMenu.findItem(R.id.cardView).setChecked(false);
itemsMenu.findItem(R.id.listView).setChecked(true);
changeLayoutType(itemDisplayType);
break;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.cardView:
item.setChecked(true);
itemsMenu.findItem(R.id.listView).setChecked(false);
changeLayoutType(CARD_VIEW);
return true;
case R.id.listView:
item.setChecked(true);
itemsMenu.findItem(R.id.cardView).setChecked(false);
changeLayoutType(LIST_VIEW);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
// this sets list or card view (when you go to options view type)
public void changeLayoutType(int displayType) {
itemDisplayType = displayType;
((MainActivity) getActivity()).setItemDisplayType(displayType);
if ((myItemsFragment != null) && (sharedItemsFragment != null)) {
myItemsFragment.setLayoutType(displayType);
sharedItemsFragment.setLayoutType(displayType);
}
}
// example items displayed
public void createItems() {
myItems = new ArrayList<Item>();
itemsSharedWithMe = new ArrayList<Item>();
((MainActivity) getActivity()).getFirebaseFirestore().collection("items")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
if (document.getId().equals("lachie")) {
addToMyItems(document.getData());
String imageUrl = document.getData().get("image").toString();
ImageView img = (ImageView)view.findViewById(R.id.itemPicture);
String url = "https://storage.cloud.google.com/artifactory-images/old_fashioned_ring.PNG";
Picasso.get().load(url).resize(50, 50).centerCrop().into(img);
}
}
} else {
System.out.println("failure");
}
}
});
}
public void addToMyItems(Map<String, Object> item) {
String name = item.get("name").toString();
String description = item.get("description").toString();
String image = item.get("image").toString();
myItems.add(new Item(name, description, image));
myItemsFragment.notifyDataSetChanged();
}
public void addToSharedItems(Item item) {
itemsSharedWithMe.add(item);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
ImageView imageView = (ImageView) view.findViewById(R.id.itemPicture);
// or (ImageView) getView().findViewById(R.id.itemPicture);
String url = "https://storage.cloud.google.com/artifactory-images/old_fashioned_ring.PNG"
Picasso.get().load(url).resize(50, 50).centerCrop().into(imageView);
.....
................
private ImageView img;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_items, container, false);
img = (ImageView)view.findViewById(R.id.itemPicture);
viewPager = view.findViewById(R.id.viewPager);
tabLayout = view.findViewById(R.id.tabLayout);
return view;
}
// this handles the two tabs at top: my items and items shared with me
private void setupItemTabs() {
itemsPagerAdapter = new ItemsPagerAdapter(getChildFragmentManager());
viewPager.setAdapter(itemsPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
}
// example items displayed
public void createItems() {
myItems = new ArrayList<Item>();
itemsSharedWithMe = new ArrayList<Item>();
((MainActivity) getActivity()).getFirebaseFirestore().collection("items")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
if (document.getId().equals("lachie")) {
addToMyItems(document.getData());
String imageUrl = document.getData().get("image").toString();
String url = "https://storage.cloud.google.com/artifactory-images/old_fashioned_ring.PNG";
Picasso.get().load(url).resize(50, 50).centerCrop().into(img);
}
}
} else {
System.out.println("failure");
}
}
});
}