2017-01-20 6 views
0

Ich verwende Gridview in meiner App, um Bilder von einem Ordner auf Sdcard ... Mein Problem ist das Scrollen in der GridView, es ist nicht so glatt wie die Galerie App. Hier ist der Adapter Code -GridView Scroll nicht glatt

public class GridViewAdapter extends BaseAdapter { 

    // Declare variables 
    private Activity activity; 
    private String[] filepath; 
    private String[] filename; 

    private static LayoutInflater inflater = null; 

    public GridViewAdapter(Activity a, String[] fpath, String[] fname) { 
     activity = a; 
     filepath = fpath; 
     filename = fname; 
     inflater = (LayoutInflater) activity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 

    public int getCount() { 
     return filepath.length; 

    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi = convertView; 
     if (convertView == null) 

      vi = inflater.inflate(R.layout.gridview_item, null); 

     // Locate the ImageView in gridview_item.xml 
     ImageView img = (ImageView) vi.findViewById(R.id.image); 


     // Set file name to the TextView followed by the position 
     TextView txt = (TextView) vi.findViewById(R.id.name); 

     // Decode the filepath with BitmapFactory followed by the position 
     Bitmap bmp = BitmapFactory.decodeFile(filepath[position]); 

     // Set the decoded bitmap into ImageView 
     img.setImageBitmap(bmp); 
     txt.setText(filename[position]); 
     return vi; 
    } 
} 

, wie dieses Problem zu lösen und das Scrollen glatt machen?

+1

Sie sollten eine ViewHolder – Rachit

Antwort

1

können Sie mach das.

  1. Implementiert Asynchronous Bild Laden, so dass jedes Bild asynchron
  2. Nutzen Sie Dritte ImageLoaders und Last Bilder in Thumbnails Größe geladen werden. Zum Beispiel UniversalImageLoader. überprüfen Sie this mehr Details
  3. Sie können RecyclerView mit GridLayoutManager statt GridView verwenden, es ist mehr optimierte Kontrolle. für ex: http://www.android-examples.com/android-recyclerview-with-gridview-gridlayoutmanager/

zusätzliche Referenz: http://www.technotalkative.com/android-select-multiple-photos-from-gallery/

0

BitmapFactory.decodeFile ist schwere Operation auf ui Faden immer wieder auszuführen. Sie haben eine Cache-Bibliothek verwendet.

Sie können eine Bildladebibliothek wie Universal image loader, Glide oder picasso verwenden.

Bitte versuchen Sie dies mit einem Halter.

class Holder{ 
ImageView img ; 
TextView txt; 
} 


public View getView(int position, View convertView, ViewGroup parent) {  
    Holder holder; 
    if (convertView == null) 
{ 
    convertView = inflater.inflate(R.layout.gridview_item, null); 
     holder=new Holder(); 

    holder.img = (ImageView) convertView.findViewById(R.id.image); 

    holder.txt = (TextView) convertView.findViewById(R.id.name); 

    convertView.setTag(holder) 
    } 
    else 
{ 
    holder=(Holder)convertView.getTag(); 
} 


    Picasso.with(activity) .load(filepath[position]) .into(holder.img); 
    txt.setText(filename[position]); 
    return convertView; 
} 
+0

verwende ich verwendet Picasso, aber es zeigt nicht images..my Imageviews sind leer .. Picasso.with (Aktivität) \t \t .load (filepath [position]) \t \t .into (img); – DarShan

+0

versuchen, dies in einer Weise zu implementieren, wie ich meine Antwort bearbeiten. – Ankur1994a

+0

Ich benutzte Glide, funktioniert besser als Picasso – DarShan

Verwandte Themen