Autore Topic: Picasso carica più di una volta le immagini  (Letto 434 volte)

Offline giupardeb

  • Utente junior
  • **
  • Post: 115
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Glaxy Note 4
Picasso carica più di una volta le immagini
« il: 16 Agosto 2015, 08:58:48 CEST »
0
Buongiorno ragazzi, ho un problema con la libreria Picasso e la GridView. Ho creato una semplice galleria di immagini attraverso la GridView, il problema è che tra una riga di foto ed un'altra riga, c'è un ampio spazio vuoto, che però se cliccato, fa aprire l'immagine di sopra oppure l'immagine di sotto. Spero che la foto possa chiarire il mio problema.


Di seguito vi posto il codice sia della GridVIew Activity che dell'adapter :

Adapter GridView

Codice: [Seleziona]
public class GridViewImageAdapter extends BaseAdapter {
 
    private Activity _activity;
    private ArrayList<String> _filePaths = new ArrayList<String>();
    private int imageWidth;
    private Context _context;
 
    public GridViewImageAdapter(Activity activity, int imageWidth, ArrayList<String> filePaths, Context context) {
 
        this._activity = activity;
        this.imageWidth = imageWidth;
        this._filePaths = filePaths;
        this._context = context;
    }
 
    @Override
    public int getCount() {
        return this._filePaths.size();
    }
 
    @Override
    public Object getItem(int position) {
        return this._filePaths.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
     @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
//            check to see if we have a view
        if (convertView == null) {
//                no view - so create a new one
            imageView = new ImageView(_context);
        } else {
//                use the recycled view object
            imageView = (ImageView) convertView;
        }
 
        File f = new File(_filePaths.get(position));
 
        Picasso.with(_activity)
                .load(f)
                .noFade()
                .into(imageView);
        return imageView;
    }

GridView Activity

Codice: [Seleziona]
public class GridViewGalleryActivity extends Activity {
 
    private Utils utils;
    private ArrayList<String> imagePaths = new ArrayList<String>();
    private GridViewImageAdapter adapter;
    private GridView gridView;
    private int columnWidth;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //permette il fullscreen in maniera costante
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
 
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_grid_view);
 
        gridView = (GridView) findViewById(R.id.grid_view);
 
        utils = new Utils(this);
 
        // Initilizing Grid View
        InitilizeGridLayout();
 
        Intent i = getIntent();
 
        imagePaths = i.getStringArrayListExtra("myArray");
 
        // Gridview adapter
        adapter = new GridViewImageAdapter(GridViewGalleryActivity.this, columnWidth, imagePaths, this);
 
        gridView.setOnItemClickListener(OnImageClickListener);
        gridView.setOnItemLongClickListener(OnImageLongClickListener);
 
        // setting grid view adapter
        gridView.setAdapter(adapter);
 
 
    }
 
    AdapterView.OnItemClickListener OnImageClickListener = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent i = new Intent(GridViewGalleryActivity.this, FullScreenViewActivity.class);
            i.putExtra("position", position);
            i.putStringArrayListExtra("myArray", imagePaths);
            GridViewGalleryActivity.this.startActivity(i);
        }
    };

A cosa è dovuto queste bande "vuote" tra righe? Spero di essere stato quanto più chiaro possibile. Buona giornata :)

Post unito: 16 Agosto 2015, 11:39:32 CEST
Ho risolto. Non era PIcasso che caricava più di una volta le immagini, ma era l'imageView che non era settata bene. Per i posteri, ecco il metodo getView Funzionante:

Codice: [Seleziona]
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
//            check to see if we have a view
        if (convertView == null) {
//                no view - so create a new one
            imageView = new ImageView(_context);
        } else {
//                use the recycled view object
            imageView = (ImageView) convertView;
        }

        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setLayoutParams(new GridView.LayoutParams(imageWidth, imageWidth));

        File f = new File(_filePaths.get(position));

            Picasso.with(_activity)
                    .load(f)
                    .noFade()
                    .into(imageView);

        return imageView;
    }
« Ultima modifica: 16 Agosto 2015, 11:39:32 CEST da giupardeb, Reason: Merged DoublePost »