Autore Topic: GridView molto lenta  (Letto 519 volte)

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
GridView molto lenta
« il: 22 Maggio 2015, 12:07:29 CEST »
0
Come da titolo non riesco a fare scorrere le immagini in maniera fluida,
quando carico le immagini vanno a scatti avete un consiglio per
velocizzare il tutto?
codice .
Codice: [Seleziona]
public class ImageAdapter extends BaseAdapter {
   
    public Integer[] mThumbIds = {
            R.drawable.......,
 };
    private Context mContext;

    // Constructor
    public ImageAdapter(Context c) {
        mContext = c;
    }

    @Override
    public int getCount() {
        return mThumbIds.length;
    }

    @Override
    public Object getItem(int position) {
        return mThumbIds[position];
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
       ImageView imageView = new ImageView(mContext);
       imageView.setImageResource(mThumbIds[position]);
       imageView.setLayoutParams(new GridView.LayoutParams(45, 45));
        return imageView;
    }


}

Offline LinkOut

  • Utente normale
  • ***
  • Post: 270
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:GridView molto lenta
« Risposta #1 il: 22 Maggio 2015, 12:19:04 CEST »
0
Che ne dici di un approccio simile?

Making ListView Scrolling Smooth | Android Developers

Codice (Java): [Seleziona]
 private ViewHolder viewHolder;
 ...
 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
                LayoutInflater mInflater = (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
               
                if(convertView == null){
                   convertView = mInflater.inflate(R.layout.tuo_layout_con_immagine, null);

                    viewHolder = new ViewHolder();

                    viewHolder.image=(ImageView) convertView.findViewById(R.id.tuoId);

                    convertView.setTag(viewHolder);
                }else {
                    viewHolder = (ViewHolder) convertView.getTag();
                }
                viewHolder.image.setImageResource(mThumbIds[position]);
                viewHolder.image.setLayoutParams(new GridView.LayoutParams(45, 45)); //Questo si può anche eliminare, l'immagine nel tuo xml può essere 45x45
        return convertView;
    }
       
        static class ViewHolder {
        ImageView image;
    }
« Ultima modifica: 22 Maggio 2015, 12:25:25 CEST da LinkOut »

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:GridView molto lenta
« Risposta #2 il: 22 Maggio 2015, 12:37:30 CEST »
0
ma questo codice non si adatta alla gridview o sbaglio?
Codice: [Seleziona]
  viewHolder.image = (ImageView) convertView.findViewById(R.id.gd1);

Offline LinkOut

  • Utente normale
  • ***
  • Post: 270
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:GridView molto lenta
« Risposta #3 il: 22 Maggio 2015, 13:11:03 CEST »
0
Ciao,

L'esempio te l'ho scritto veloce, dovresti usare un pattern come il ViewHolder e in aggiunta la cosa più importante è riciclare la view, come dimostrato nell'esempio sul sito ufficiale:

Grid View | Android Developers

Codice (Java): [Seleziona]
public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {
            // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:GridView molto lenta
« Risposta #4 il: 22 Maggio 2015, 13:37:28 CEST »
0
picche!
anche in questo modo lo scroll è pietoso

Offline LinkOut

  • Utente normale
  • ***
  • Post: 270
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:GridView molto lenta
« Risposta #5 il: 22 Maggio 2015, 13:44:30 CEST »
0
Beh, se carichi immagini molto pesanti è anche ovvio.

Prego: Loading Large Bitmaps Efficiently | Android Developers , diversamente il problema è da ricercare altrove.

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:GridView molto lenta
« Risposta #6 il: 22 Maggio 2015, 13:57:49 CEST »
0
decisamente no il peso +/- è 28,0 KB
ed il numero è di circa 180 img

** anzi aggiungo che con il mio codice lo scroll non è fluido però
almeno quando lo scroll è arrivato al bottom la risalita poi è liscia
**


Post unito: [time]22 Maggio 2015, 14:21:31 CEST[/time]
è questo è il codice dentro il fragment:
Codice: [Seleziona]
public class FiveFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.five_frag, container, false);
        GridView gd5 = (GridView) v.findViewById(R.id.gridView5);
        gd5.setAdapter(new ImageAdapter4(getActivity().getBaseContext()));

        return v;
    }

    public static FiveFragment newInstance(String text) {

        FiveFragment f = new FiveFragment();
        Bundle b = new Bundle();
        b.putString("msg", text);

        f.setArguments(b);

        return f;
    }
}
« Ultima modifica: 22 Maggio 2015, 14:26:24 CEST da x69asterix2 »

Offline LinkOut

  • Utente normale
  • ***
  • Post: 270
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:GridView molto lenta
« Risposta #7 il: 22 Maggio 2015, 17:20:47 CEST »
0
La cosa mi sembra molto strana, riesci a postare un esempio completo?

Grazie.

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:GridView molto lenta
« Risposta #8 il: 24 Maggio 2015, 11:29:29 CEST »
0
ok!
risolto, il problema riguardava proprio le immagini, non tanto il loro peso,
ma bensì i pixels!!

Dato che siamo in tema, adesso ho un secondo problema:
Il mio viewpager ha cinque fragment, che chiamo da una activity
in questo modo:
dove activity_tab1 contiene il viewpager
Codice: [Seleziona]
  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        setContentView(R.layout.activity_my);
  LinearLayout mContainer = (LinearLayout) findViewById(R.id.lnfrm);
            LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(getApplicationContext().LAYOUT_INFLATER_SERVICE);
            View view = inflater.inflate(R.layout.activity_tab1, null);

            final ViewPager pager = (ViewPager) view.findViewById(R.id.viewPager);
            pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
ogni fragment contiene una gridview,
da questa activity come faccio a farmi ritornare la posizione della gridview cliccata?