2016-06-24 8 views
0

in meinem Projekt ich meine ziehbar Bilder in Array gespeichert bin wie dieserShop Bilder von URL in Array Ausgabe

int[] mLocIds = new int[]{R.mipmap.ic_sticker_01, R.mipmap.ic_sticker_02, R.mipmap.ic_sticker_03, 
     R.mipmap.ic_sticker_04, R.mipmap.ic_sticker_05, R.mipmap.ic_sticker_06, R.mipmap.ic_sticker_07, 
     R.mipmap.ic_sticker_08}; 

und hier ist mein Array:

List<StickerView> mStickers = new ArrayList<>(); 

Aber ich möchte Bilder zeigen von url (url in der Datenbank bekommen), aber mein GalleryAdapter erlaubt int-Array:

public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.ViewHolder> implements View.OnClickListener { 

private int[] mResIds; 
private int[] mLocIds; 

public GalleryAdapter(int[] resIds) { 
    this.mResIds = resIds; 
} 

private OnRecyclerViewItemClickListener mOnItemClickListener = null; 

public interface OnRecyclerViewItemClickListener { 
    void onItemClick(View view, int resId); 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_gallery, viewGroup, false); 
    ViewHolder vh = new ViewHolder(view); 
    view.setOnClickListener(this); 
    return vh; 
} 

@Override 
public void onBindViewHolder(ViewHolder viewHolder, int position) { 
    viewHolder.imageView.setImageResource(mResIds[position]); 
    viewHolder.itemView.setTag(mResIds[position]); 
} 

@Override 
public void onClick(View v) { 
    if (mOnItemClickListener != null) { 
     mOnItemClickListener.onItemClick(v, (Integer) v.getTag()); 
    } 
} 

public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { 
    this.mOnItemClickListener = listener; 
} 

@Override 
public int getItemCount() { 
    return mResIds.length; 
} 

public static class ViewHolder extends RecyclerView.ViewHolder { 
    public ImageView imageView; 

    public ViewHolder(View view) { 
     super(view); 
     imageView = (ImageView) view.findViewById(R.id.item_sticker); 
    } 
} 


public void setData(int[] mLocIds) { 
    this.mResIds = mLocIds; 
    notifyDataSetChanged(); 
} 

public void setDataStandart(int[] mResIds) { 
    this.mResIds = mResIds; 
    notifyDataSetChanged(); 
} 

}

fand ich diese Lösung, aber es ist nicht klar, wie diese nutzen:

public void setBitmaps(Bitmap... bitmaps) { 
    for (int i = 0; i < mImageViews.length; i++) { 
     mImageViews[i].setImageBitmap(bitmaps[i]); 
    } 
} 

ich weiß, werde ich meine Tätigkeit aktualisieren und zunächst herunterladen Bitmap und als Speicher-Bitmap in Array, aber wie kann ich das tun? Danke für Hilfe.

Antwort

0

Ich bin gelöst Mein Problem eigenes besitzen mein eigenes! Hier ist die referance: Futurestud.io

erstens bin ich mein int ändern [] zu String []

String[] mResIds = new String[]{"http://pngimg.com/upload/scratches_PNG6175.png","http://pngimg.com/upload/tiger_PNG549.png"}; 

dann in meiner GalleryAdapter Änderung ist wie folgt:

public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.ViewHolder> implements View.OnClickListener { 

    private String[] mResIds; 

    public GalleryAdapter(String[] resIds) { 


     this.mResIds = resIds; 

    } 

    private OnRecyclerViewItemClickListener mOnItemClickListener = null; 

    public interface OnRecyclerViewItemClickListener { 
     void onItemClick(View view, String resId); 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
     View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_gallery, viewGroup, false); 
     ViewHolder vh = new ViewHolder(view); 
     view.setOnClickListener(this); 
     return vh; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder viewHolder, int position) { 


    // Uri uri = Uri.parse(String.valueOf(mResIds)); 
     Context context = viewHolder.imageView.getContext(); 
     Picasso.with(context) 
       .load(mResIds[position]) 
       .into(viewHolder.imageView); 


     // viewHolder.imageView.setImageResource(mResIds[position]); 
     viewHolder.itemView.setTag(mResIds[position]); 
    } 

    @Override 
    public void onClick(View v) { 
     if (mOnItemClickListener != null) { 

      mOnItemClickListener.onItemClick(v, (String) v.getTag()); 
     } 
    } 

    public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { 
     this.mOnItemClickListener = listener; 
    } 

    @Override 
    public int getItemCount() { 
     return mResIds.length; 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder { 
     public ImageView imageView; 

     public ViewHolder(View view) { 
      super(view); 
      imageView = (ImageView) view.findViewById(R.id.item_sticker); 
     } 
    } 


    public void setData(String[] mResIds) { 
     this.mResIds = mResIds; 
     notifyDataSetChanged(); 
    } 

    public void setDataStandart(String[] mResIds) { 
     this.mResIds = mResIds; 
     notifyDataSetChanged(); 
    } 


    } 

und dann meine konvertieren String Bitmap:

public static Bitmap getBitmapFromURL(String urlbit) { 
    try { 
     URL url = new URL(urlbit); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoInput(true); 
     connection.connect(); 
     InputStream input = connection.getInputStream(); 
     Bitmap myBitmap = BitmapFactory.decodeStream(input); 
     return myBitmap; 
    } catch (IOException e) { 
     // Log exception 
     return null; 
    } 
} 

schließlich ich erhalte Bitmap:

0

Sie können ein Array von Strings übergeben, das die URL enthält, und eine Bildladeprogramm-Bibliothek wie Glide, Picasso verwenden.

Hier ist ein Beispiel dafür, wie Gleiten verwenden:

Glide.with(context) 
      .load(url) 
      .centerCrop() 
      .placeholder(R.drawable.placeholder) 
      .into(viewHolder.imageView); 

Abgesehen davon müssen Sie Ihren Adapter ändern und es mit Arraylist zu initialisieren. Lassen Sie es mich wissen, wenn Sie Probleme bei der Implementierung haben.

+0

Vielen Dank für die Antwort, aber ich muss den GalleryAdapter verwenden, weil in meiner Anwendung es die Aufkleber in recycler_view speichern und wenn ich einen von ihnen auswähle, drückte er Aufkleber auf dem Bild.So wenn ich Ihren Weg benutze, kann ich sie alle machen? –

+0

Ja, meine Antwort ist nicht über Adapter und View, es ging um Image Loading Library, die Sie verwenden, um Bilder zu laden, also für jede Art von Ansicht, wenn Sie Bilder laden müssen, können Sie diese verwenden. – himanshu1496