2013-08-27 8 views
6

Voglio creare una galleria personalizzata per visualizzare tutte le immagini e i video (insieme alla durata) in sdcard. Sto usando il seguente codice per costruire una galleria personalizzataGalleria personalizzata con immagini e video in Android per selezionare più elementi

Codice:

final String[] columns = { MediaStore.Images.Media.DATA ,MediaStore.Images.Media._ID}; 
    final String orderBy = MediaStore.Images.Media.DATE_TAKEN; 
    Cursor imagecursor = getContentResolver().query(
      MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, 
      null, orderBy + " DESC"); 

    this.imageUrls = new ArrayList<String>(); 


    for (int i = 0; i < imagecursor.getCount(); i++) { 
     imagecursor.moveToPosition(i); 
     int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA); 
     imageUrls.add(imagecursor.getString(dataColumnIndex)); 

    } 
    String[] parameters = { MediaStore.Video.Media._ID, 
       MediaStore.Video.Media.DATA, 
       MediaStore.Video.Media.DISPLAY_NAME, 
       MediaStore.Video.Media.SIZE, MediaStore.Video.Media.DURATION, 
       MediaStore.Video.Media.DATE_TAKEN,MediaStore.Video.Thumbnails.DATA}; 



    Cursor videocursor = getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, 
       parameters, null, null, null); 

    for (int i = 0; i < videocursor.getCount(); i++) { 
     videocursor.moveToPosition(i); 
     imageUrls.add(videocursor.getString(videocursor.getColumnIndex(MediaStore.Video.Thumbnails.DATA))); 
      } 
    options = new DisplayImageOptions.Builder() 
     .showStubImage(R.drawable.stub_image) 
     .showImageForEmptyUri(R.drawable.image_for_empty_url) 
     .cacheInMemory() 
     .cacheOnDisc() 
     .build(); 

    imageAdapter = new ImageAdapter(this, imageUrls); 

dal codice di cui sopra sono in grado di ottenere il percorso del video, come posso ottenere la miniatura del video insieme durata del video. e rappresentarlo nella galleria

se ci sono buit in progetti per galleria personalizzata con video e immagini si prega di postare i link in realtà voglio creare una galleria personalizzata per selezionare più immagini e file video. ho cercato molto in google sto trovando la galleria di immagini personalizzate ma non con i video per favore aiutami a risolvere questo problema.

+2

potete inserire quello che ha finito per fare? Sto provando a fare la stessa cosa. – scientiffic

risposta

5

È possibile avere un'idea da Custom GridView con più opzioni di selezione. C'è un progetto open source in Github.

https://github.com/paramvir-b/AndroidGridViewCompatLib

enter image description here

in questo esempio è necessario modificare

imageView.setImageResource(mThumbIds[position]); 

a

imageView.setImageURI(uri);// URI of Image from SD Card 

o

imageView.setImageBitmap(bitmap); 

per Video: -

Video Thumbnail is in the form of Bitmap so you can show in ImageView. 
private Bitmap bmThumbnail; 
private ImageView videoview = null; 
bmThumbnail = ThumbnailUtils.createVideoThumbnail(PATH_OF_THE_VIDEO,Thumbnails.MICRO_KIND); 
videoview.setImageBitmap(bmThumbnail); 

per ottenere Durata: -

String[] proj = { MediaStore.Video.Media.DATA ,MediaStore.Video.Media.DURATION}; 
Cursor cursor = managedQuery(contentUri, proj, null, null, null); 
if (cursor == null) 
    return null; 
int column_index = cursor 
     .getColumnIndexOrThrow(MediaStore.Video.Media.DATA); 
int column_index_duration = cursor 
     .getColumnIndexOrThrow(MediaStore.Video.Media.DURATION); 
cursor.moveToFirst(); 
long duration= cursor.getInt(column_index_duration); 
String videoPath= cursor.getString(column_index); 
+0

Come posso ottenere il percorso video insieme alla miniatura del video e alla durata. –

+0

@madanV vedere la mia risposta aggiornata.Plz provare così. –

+0

grazie per la tua risposta lo proverò –

0

Ottenere Video Miniature e durata:

for(int ii = 0; ii < videocursor.getCount(); ii ++){ 
       videocursor.moveToPosition(ii); 
       int id_v = videocursor.getInt(video_column_index); 
       int datacolumn_v = videocursor.getColumnIndex(MediaStore.Video.Media.DATA); 
       long duration = videocursor.getInt(video_column_duration);    // getting duration of the every videos 

       String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(duration), 
         TimeUnit.MILLISECONDS.toMinutes(duration) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(duration)), 
         TimeUnit.MILLISECONDS.toSeconds(duration) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration))); 

       durationcount.add(hms); 

       bitList.add(MediaStore.Video.Thumbnails.getThumbnail(getContentResolver(), id_v, 
         MediaStore.Video.Thumbnails.MICRO_KIND, null)); 
       arrPathList.add(videocursor.getString(datacolumn_v)); 
      } 
0
int column_index_thumb_data = videoCursor.getColumnIndex(MediaStore.Video.Thumbnails.DATA); 

String thumbnail = videoCursor.getString(column_index_thumb_data); 
+3

[Si prega di formattare correttamente la risposta] (https://stackoverflow.com/editing-help) – Dwhitz

+2

Puoi spiegare perché la tua soluzione funziona? Per i futuri lettori è importante sapere perché qualcosa funziona piuttosto che incollare copia senza averne la minima idea –

Problemi correlati