2012-04-01 7 views
0

So, ich mag viele haben eine Galerie erstellen gekämpft, die zwei Reihen für Android hat ..Galerie und baseAdapter Inkrementierung android

bisher meine Lösung ist ein Basisadapter Anruf auslegen zu haben, dass zwei Tabellenzeilen hat mit einem Punkt für ein Foto in jedem, und dann in meinem Basis-Adapter ein Bild platzieren, dann bewegen Sie den Cursor an die nächste Position und ein anderes Bild in den zweiten Platz Halter .. Es funktioniert soweit akzeptieren, dass wir am Ende mit wiederholten Bildern .. also plaziere ich image1 und image2 im ersten Durchlauf und plaziere dann den nächsten Durchlauf image2 über image3, .. gibt es eine Möglichkeit, das Inkrement einzustellen, auf das mein Basisadapter aufgerufen wird?

FIXED CODE UNTEN

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

Wollen Sie also zwei Zeilen, die unabhängig voneinander scrollen, oder erstellen Sie nur eine Galerie mit zwei Zeilen pro Element (getview call)? – dmon

+0

2 Zeilen pro getview Anruf .. – erik

Antwort

1

warten, ist nicht das, was Sie wollen einfach nur:

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

Sie müssen nur getCount() die richtige Größe in Ihrem Adapters zurück.

+0

ich nicht folgen? – erik

+0

ich weiß nicht, was du wirklich sagst .. ich dachte, dass getCount die Gesamtzahl der gefundenen Bilder zurücksendet .. worüber ich verwirrt bin, ist, wie getView() nur jedes andere Bild aufgerufen wird. – erik

+0

(Ich bin rede nicht von 'cursor.getCount()') Also willst du 2 Dinge pro get anzeigen richtig anzeigen? Dann muss Ihr * Adapter * angeben, dass er die Hälfte der Dinge hat, als er wirklich hat, auf diese Weise wird 'getView()' nur die Hälfte der Zeiten aufgerufen. Dann ist es in 'getView()' deine Pflicht, die zwei Bilder, die dieser Position entsprechen, zu rendern, und das ist der Punkt, wo 'pos * 2' und' pos * 2 + 1' reinkommen. – dmon