2012-04-01 1 views
0

, j'aime beaucoup ont été aux prises pour créer une galerie qui a deux lignes pour Android ..Galerie et baseAdapter incrémentation android

jusqu'à présent ma solution est d'avoir un adaptateur de base appel disposer que deux rangées de table avec une place pour une photo dans chacun, puis dans mon adaptateur de base placez une image puis déplacez mon curseur à la position suivante et placez une autre image dans la deuxième place .. il travaille jusqu'à présent accepter que nous nous retrouvons avec des images répétées .. donc je place l'image1 et l'image 2 dans le premier passage, puis le passage suivant il place image2 sur image3, .. est-il un moyen de définir l'incrément à laquelle mon adaptateur de base est appelé?

CODE CI-DESSOUS FIXES

public class GallAdapter extends BaseAdapter { 
     public Cursor cursor; 
     private int columnIndex; 
     private Context context; 
     int imageBackground; 
     String url; 
     Uri uri; 
     int originalImageId; 
     int imageID; 
     int columnData; 
     ViewGroup myp; 
     ImageView d; 
     ImageView d2; 
     Boolean done = false; 

     public GallAdapter(Context ctx, Cursor cur, int cIn) { 
      context = ctx; 
      columnIndex = cIn; 

      cursor = cur; 

     } 

     @Override 
     public int getCount() { 
      Toast.makeText(context, "old:"+cursor.getCount()+" 1/2:"+cursor.getCount()/2+" roundedup:"+Math.ceil((float)cursor.getCount()/2), Toast.LENGTH_SHORT).show(); 
      return (int) Math.ceil((float)cursor.getCount()/2); 
     } 

     @Override 
     public Object getItem(int position) { 

      return position; 
     } 

     @Override 
     public long getItemId(int position) { 

      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      myp = parent; 
      View v; 

      if(convertView == null){ 
       v = LayoutInflater.from(context).inflate(R.layout.galitem2, parent, false); 
      }else{ 
       v = convertView; 

      } 


      ImageView photo = (ImageView) v.findViewById(R.id.imageView); 
      ImageView border = (ImageView) v.findViewById(R.id.borderView); 
      d = (ImageView) v.findViewById(R.id.delView); 

      ImageView photo2 = (ImageView) v.findViewById(R.id.image2View); 
      ImageView border2 = (ImageView) v.findViewById(R.id.border2View); 
      d2 = (ImageView) v.findViewById(R.id.del2View); 

       cursor.moveToPosition(position*2); 

       // Get the current value for the requested column 
       imageID = cursor.getInt(columnIndex); 
       // obtain the image URI 
       uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(imageID)); 
       url = uri.toString(); 
       // Set the content of the image based on the image URI 
       originalImageId = Integer.parseInt(url.substring(url.lastIndexOf("/") + 1, url.length())); 
       Bitmap b = MediaStore.Images.Thumbnails.getThumbnail(context.getContentResolver(), 
           originalImageId, MediaStore.Images.Thumbnails.MINI_KIND, null); 
       photo.setImageBitmap(b); 

       photo.setScaleType(ImageView.ScaleType.FIT_CENTER); 
       d.setTag(uri); 
       d.setOnClickListener(new OnClickListener(){ 


        public void onClick(View v) { 
         // TODO Auto-generated method stub 
         String path = getRealPathFromURI((Uri) v.getTag()); 

         File file = new File(path); 
         file.delete(); 
         getContentResolver().delete((Uri) v.getTag(), null, null); 
         sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()+"/LC/images/"))); 
         Intent galView = new Intent(getBaseContext(), GalleryView2.class); 
         galView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         getBaseContext().startActivity(galView); 
         finish(); 


        } 


       }); 
       if(position*2+1<=cursor.getCount()-1){ 
        // Move cursor NEXT current position 

        cursor.moveToPosition(position*2+1); 

        // Get the current value for the requested column 
        imageID = cursor.getInt(columnIndex); 
        // obtain the image URI 
        uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(imageID)); 
        url = uri.toString(); 
        // Set the content of the image based on the image URI 
        originalImageId = Integer.parseInt(url.substring(url.lastIndexOf("/") + 1, url.length())); 
        Bitmap b2 = MediaStore.Images.Thumbnails.getThumbnail(context.getContentResolver(), 
            originalImageId, MediaStore.Images.Thumbnails.MINI_KIND, null); 
        photo2.setImageBitmap(b2); 

        photo2.setScaleType(ImageView.ScaleType.FIT_CENTER);  
        d2.setTag(uri); 
        d2.setOnClickListener(new OnClickListener(){ 


         public void onClick(View v) { 
          // TODO Auto-generated method stub 
          String path = getRealPathFromURI((Uri) v.getTag()); 

          File file = new File(path); 
          file.delete(); 
          getContentResolver().delete((Uri) v.getTag(), null, null); 
          sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()+"/LC/images/"))); 
          Intent galView = new Intent(getBaseContext(), GalleryView2.class); 
          galView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
          getBaseContext().startActivity(galView); 
          finish(); 


         } 


        }); 
       }else{ 
        //border2.setVisibility(v.INVISIBLE); 
        d2.setVisibility(v.INVISIBLE); 

       } 

      return v; 
     } 

    } 



} 
+0

Alors, voulez-vous deux lignes qui défilent indépendamment, ou créez-vous simplement une galerie qui a deux lignes par élément (appel getview)? – dmon

+0

2 lignes par appel getview .. – erik

Répondre

1

d'attente, est pas ce que vous voulez juste:

first photo -> cursor.moveToPosition(position * 2); 
second photo -> cursor.moveToPosition(position * 2 + 1); 

Vous avez juste besoin de retourner la bonne taille dans votre adaptateur de getCount().

+0

je ne suis pas? – erik

+0

Je ne sais pas ce que vous dites vraiment .. je pensais getCount a renvoyé le nombre total d'images trouvées .. ce que je suis perplexe sur est de savoir comment faire getView() seulement obtenir appelé toutes les autres images .. – erik

+0

(Je suis ne parle pas de 'cursor.getCount()') Donc vous voulez afficher 2 choses par get view à droite? Ensuite, votre * adaptateur * doit indiquer qu'il a la moitié des choses qu'il a réellement, de cette façon 'getView()' ne sera appelé que la moitié des fois. Ensuite, dans 'getView()' votre devoir est de rendre les deux images qui correspondent à cette position, et c'est là que les 'pos * 2' et' pos * 2 + 1' entrent en jeu. – dmon