How to Create Video Gallery App Using Recyclerview

How to Create Video Gallery App Using Recyclerview

Here we will create a simple Video Gallery in android using Recyclerview. Below is the project structure of this tutorial. You can download the demo app from Google Play.

You may Like:-

Below is the Project Structure of our  Video Gallery using Recyclerview App

Project Structure

Project Setup for creating the Video Gallery using Recyclerview

In above given screen shots you can see the hierarchy of our Video Gallery example tutorial. For creating the project go Android Studio File Menu – New – New Project and then give the name of your project and select an empty Activity.

1.Update build.gradle

First of all you have to update your app level build.gradle file to include some gradle dependency. So modify your build.gradle file as given below.
build.gradle
 apply plugin: 'com.android.application'  
 android {  
   compileSdkVersion 24  
   buildToolsVersion "24.0.2"  
   defaultConfig {  
     applicationId "com.debugandroid.videolist"  
     minSdkVersion 16  
     targetSdkVersion 24  
     versionCode 1  
     versionName "1.0"  
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"  
   }  
   buildTypes {  
     release {  
       minifyEnabled false  
       proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
     }  
   }  
 }  
 dependencies {  
   compile fileTree(dir: 'libs', include: ['*.jar'])  
   androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {  
     exclude group: 'com.android.support', module: 'support-annotations'  
   })  
   compile 'com.android.support:appcompat-v7:24.2.1'  
   compile 'com.android.support:cardview-v7:24.2.0'  
   compile 'com.android.support:recyclerview-v7:24.2.0'  
   compile 'com.github.bumptech.glide:glide:3.7.0'  
   testCompile 'junit:junit:4.12'  
 }  

2. Create xml file

In second steps we will create our xml file for our Video Gallery
activity_main.xml

 <?xml version="1.0" encoding="utf-8"?>  
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   xmlns:tools="http://schemas.android.com/tools"  
   android:id="@+id/activity_main"  
   android:layout_width="match_parent"  
   android:layout_height="match_parent"  
   tools:context="com.debugandroid.VideoGallery.MainActivity">  
   <android.support.v7.widget.RecyclerView  
     android:layout_width="match_parent"  
     android:layout_height="match_parent"  
     android:id="@+id/recyclerView">  
   </android.support.v7.widget.RecyclerView>  
 </RelativeLayout>  

video_item.xml

 <?xml version="1.0" encoding="utf-8"?>  
 <android.support.v7.widget.CardView  
   xmlns:card_view="http://schemas.android.com/apk/res-auto"  
   xmlns:android="http://schemas.android.com/apk/res/android"  
   android:id="@+id/card_view"  
   android:layout_width="match_parent"  
   android:layout_height="wrap_content"  
   card_view:cardCornerRadius="1dp"  
   android:layout_margin="2dp">  
   <LinearLayout android:orientation="vertical"  
          android:layout_width="match_parent"  
          android:layout_height="wrap_content">  
     <android.support.v7.widget.CardView  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       card_view:cardCornerRadius="1dp"  
       android:layout_margin="0dp">  
       <ImageView  
         android:layout_width="200dp"  
         android:layout_height="100dp"  
         android:id="@+id/media_img_bck"  
         android:layout_gravity="center"  
         android:scaleType="fitXY"  
         />  
       <TextView  
         android:layout_marginTop="5dp"  
         android:layout_marginRight="5dp"  
         android:layout_width="wrap_content"  
         android:layout_height="wrap_content"  
         android:layout_weight=".40"  
         android:gravity="right|top"  
         android:textSize="10sp"  
         android:textStyle="italic"  
         android:id="@+id/media_new"  
         android:layout_gravity="right|top"  
         android:layout_marginBottom="10dp"  
         android:visibility="invisible"/>  
     </android.support.v7.widget.CardView>  
     <LinearLayout  
       android:layout_width="match_parent"  
       android:layout_height="wrap_content"  
       android:orientation="vertical"  
       android:weightSum="1">  
       <TextView  
         android:layout_marginTop="5dp"  
         android:layout_marginLeft="5dp"  
         android:layout_width="match_parent"  
         android:layout_height="wrap_content"  
         android:text="Title"  
         android:gravity="left|top"  
         android:id="@+id/media_name"  
         android:textColor="@android:color/primary_text_light"  
         android:layout_gravity="center_vertical"  
         android:layout_weight="0.60"  
         android:textSize="12sp"/>  
       <TextView  
         android:layout_marginTop="5dp"  
         android:layout_marginLeft="5dp"  
         android:layout_width="match_parent"  
         android:layout_height="wrap_content"  
         android:layout_weight=".40"  
         android:gravity="left"  
         android:textSize="10sp"  
         android:textStyle="normal"  
         android:textColor="@android:color/secondary_text_dark"  
         android:id="@+id/media_details"  
         android:layout_gravity="center_vertical"  
         android:layout_marginBottom="10dp"/>  
     </LinearLayout>  
   </LinearLayout>  
 </android.support.v7.widget.CardView>  

header.xml

 <?xml version="1.0" encoding="utf-8"?>  
 <android.support.v7.widget.CardView  
   xmlns:android="http://schemas.android.com/apk/res/android"  
   android:layout_width="match_parent"  
   android:layout_height="wrap_content"  
   xmlns:card_view="http://schemas.android.com/tools"  
   xmlns:app="http://schemas.android.com/apk/res-auto"  
   card_view:cardCornerRadius="1dp"  
   android:layout_marginBottom="0dp"  
   android:layout_marginTop="0dp"  
   android:layout_marginLeft="0dp"  
   android:layout_marginRight="0dp"  
   >  
       <TextView  
         android:id="@+id/gallery_title"  
         android:layout_width="match_parent"  
         android:layout_height="wrap_content"  
         android:text="Gallery"  
         android:layout_gravity="left"  
         android:gravity="left"  
         android:textSize="16sp"  
         android:textColor="@android:color/primary_text_light"  />  
 </android.support.v7.widget.CardView>  

footer.xml

 <?xml version="1.0" encoding="utf-8"?>  
 <android.support.v7.widget.CardView  
   xmlns:android="http://schemas.android.com/apk/res/android"  
   android:layout_width="match_parent"  
   android:layout_height="wrap_content"  
   xmlns:card_view="http://schemas.android.com/tools"  
   xmlns:app="http://schemas.android.com/apk/res-auto"  
   card_view:cardCornerRadius="1dp"  
   android:layout_marginBottom="0dp"  
   android:layout_marginTop="0dp"  
   android:layout_marginLeft="0dp"  
   android:layout_marginRight="0dp"  
   >  
       <TextView  
         android:id="@+id/gallery_title"  
         android:layout_width="match_parent"  
         android:layout_height="wrap_content"  
         android:text="Gallery"  
         android:layout_gravity="left"  
         android:gravity="left"  
         android:textSize="16sp"  
         android:textColor="@android:color/primary_text_light"  />  
 </android.support.v7.widget.CardView>  


As you can saw that we have created four xml files hear, here one activity_main.xml is the main layout file of our application, video_item.xml will be used for display the indiviual video inside recyler view and header & footer view will be used to display the header inside our recycler view. However here in this example we are not going to use the footer but adding it here if you required then you can enable it by just putting true at the time of adapter initialization.

 

3.Creating class for our Video Gallery using Recyclerview

Here we will create for java file which we use in our project.
  • MainActivity.java is the main activity launch class from where we start our app.
  • MediaQuery.java will be used to featch the details of the video.
  • VideoAdapter.java is adapter for our recycler view to show the video.
  • VideoItem.java is the class to define the Video Item details like Name, size etc.

VideoItem.java

 package com.debugandroid.VideoGallery;  
 /**  
  * Created by Pawan on 4/8/2016.  
  */  
 public class VideoItem {  
   String _ID;  
   String ARTIST;  
   String TITLE;  
   String DATA;  
   String DISPLAY_NAME;  
   String DURATION;  
   public VideoItem(String _ID, String ARTIST, String TITLE,   
            String DATA, String DISPLAY_NAME, String DURATION){  
     this._ID=_ID;  
     this.ARTIST=ARTIST;  
     this.TITLE=TITLE;  
     this.DATA=DATA;  
     this.DISPLAY_NAME=DISPLAY_NAME;  
     this.DURATION=DURATION;  
   };  
   public VideoItem(){  
   }  
   public String get_ID() {  
     return _ID;  
   }  
   public void set_ID(String _ID) {  
     this._ID = _ID;  
   }  
   public String getARTIST() {  
     return ARTIST;  
   }  
   public void setARTIST(String ARTIST) {  
     this.ARTIST = ARTIST;  
   }  
   public String getTITLE() {  
     return TITLE;  
   }  
   public void setTITLE(String TITLE) {  
     this.TITLE = TITLE;  
   }  
   public String getDATA() {  
     return DATA;  
   }  
   public void setDATA(String DATA) {  
     this.DATA = DATA;  
   }  
   public String getDISPLAY_NAME() {  
     return DISPLAY_NAME;  
   }  
   public void setDISPLAY_NAME(String DISPLAY_NAME) {  
     this.DISPLAY_NAME = DISPLAY_NAME;  
   }  
   public String getDURATION() {  
     return DURATION;  
   }  
   public void setDURATION(String DURATION) {  
     this.DURATION = DURATION;  
   }  
 }  

MediaQuery.java

 package com.debugandroid.VideoGallery;  
 import android.content.Context;  
 import android.database.Cursor;  
 import android.provider.MediaStore;  
 import java.util.ArrayList;  
 import java.util.List;  
 /**  
  * Created by Pawan on 4/8/2016.  
  */  
 public class MediaQuery {  
   private Context context;  
   private int count = 0;  
   private Cursor cursor;  
   List<VideoItem> videoItems;  
   public MediaQuery(Context context){  
     this.context=context;  
   }  
   public List<VideoItem> getAllVideo() {  
     String selection = null;  
     String[] projection = {  
         MediaStore.Video.Media._ID,  
         MediaStore.Video.Media.ARTIST,  
         MediaStore.Video.Media.TITLE,  
         MediaStore.Video.Media.DATA,  
         MediaStore.Video.Media.DISPLAY_NAME,  
         MediaStore.Video.Media.DURATION  
     };  
     cursor = context.getContentResolver().query(  
         MediaStore.Video.Media.EXTERNAL_CONTENT_URI,  
         projection,  
         selection,  
         null,  
         null);  
     videoItems = new ArrayList<VideoItem>();  
     VideoItem videoItem;  
     while (cursor.moveToNext()) {  
       videoItem = new VideoItem();  
       videoItem.set_ID(cursor.getString(0));  
       videoItem.setARTIST(cursor.getString(1));  
       videoItem.setTITLE(cursor.getString(2));  
       videoItem.setDATA(cursor.getString(3));  
       videoItem.setDISPLAY_NAME(cursor.getString(4));  
       videoItem.setDURATION(cursor.getString(5));  
       videoItems.add(videoItem);  
     }  
   return videoItems;  
   }  
   public int getVideoCount(){  
     int count=0;  
     count=(getAllVideo()).size();  
     return count;  
   }  
 }  

VideoAdapter.java

 package com.debugandroid.VideoGallery;  
 import android.content.Context;  
 import android.content.Intent;  
 import android.net.Uri;  
 import android.os.Bundle;  
 import android.support.v7.widget.RecyclerView;  
 import android.util.Log;  
 import android.view.LayoutInflater;  
 import android.view.View;  
 import android.view.ViewGroup;  
 import android.view.animation.AlphaAnimation;  
 import android.view.animation.Animation;  
 import android.view.animation.ScaleAnimation;  
 import android.widget.ImageView;  
 import android.widget.TextView;  
 import com.bumptech.glide.Glide;  
 import java.util.List;  
 /**  
  * Created by Pawan on 2/20/2016.  
  */  
 public class VideoAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {  
   private List<VideoItem> videoList;  
   Context context;  
   private final static int FADE_DURATION = 1000;  
   public static Glide glid;  
   private String album_name;  
   String name;  
   int days;  
   Bundle bundle=new Bundle();  
   private static final int TYPE_HEADER = 0;  
   private static final int TYPE_ITEM = 1;  
   private static final int TYPE_FOOTER = 2;  
   private boolean mWithHeader;  
   private boolean mWithFooter;  
   public VideoAdapter(List<VideoItem> videoList, Context context, String album, boolean withHeader, boolean withFooter) {  
     this.videoList = videoList;  
     this.context=context;  
     this.album_name=album;  
     this.mWithHeader=withHeader;  
     this.mWithFooter=withFooter;  
   }  
   @Override  
   public int getItemViewType(int position) {  
     if (mWithHeader && isPositionHeader(position))  
       return TYPE_HEADER;  
     if (mWithFooter && isPositionFooter(position))  
       return TYPE_FOOTER;  
     return TYPE_ITEM;  
   }  
   @Override  
   public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {  
     if(viewType==TYPE_HEADER) {  
       return new headView(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.header, viewGroup, false));  
     }  
     else if(viewType==TYPE_FOOTER){  
       return new footer(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.footer, viewGroup, false));  
     }  
     else {  
       View itemView = LayoutInflater.  
           from(viewGroup.getContext()).  
           inflate(R.layout.video_item, viewGroup, false);  
       VideoViewHolder holder = new VideoViewHolder(itemView);  
       itemView.setTag(holder);  
       return holder;  
     }  
   }  
   @Override  
   public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {  
     if(holder instanceof headView){  
       ((headView) holder).vName.setText(album_name);  
     }  
     else if(holder instanceof footer){  
       ((footer) holder).context = context;  
     }  
     else {  
       VideoItem mediaObject=getItem(position);  
       name=mediaObject.getDISPLAY_NAME();  
       if (name.length() > 25) {  
        ((VideoViewHolder) holder).vName.setText(name.substring(0, 25) + "..");  
        } else {  
        ((VideoViewHolder) holder).vName.setText(name);  
        }  
       ((VideoViewHolder) holder).vImage.setImageResource(R.color.cardview_dark_background);  
       ((VideoViewHolder) holder).vFilePath = mediaObject.getDATA();  
       ((VideoViewHolder) holder).context = context;  
       ((VideoViewHolder) holder).b = bundle;  
       ((VideoViewHolder) holder).position = position;  
       glid.with(context)  
           .load(mediaObject.getDATA())  
           .centerCrop()  
           .placeholder(R.color.cardview_dark_background)  
           .crossFade()  
           .into(((VideoViewHolder) holder).vImage);  
       setScaleAnimation(((VideoViewHolder) holder).vImage);  
     }  
   }  
   private void setScaleAnimation(View view) {  
     ScaleAnimation anim = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);  
     anim.setDuration(FADE_DURATION);  
     view.startAnimation(anim);  
   }  
   private void setFadeAnimation(View view) {  
     AlphaAnimation anim = new AlphaAnimation(0.0f, 1.0f);  
     anim.setDuration(FADE_DURATION);  
     view.startAnimation(anim);  
   }  
   @Override  
   public void onAttachedToRecyclerView(RecyclerView recyclerView) {  
     super.onAttachedToRecyclerView(recyclerView);  
   }  
   @Override  
   public int getItemCount() {  
     int itemCount = videoList.size();  
     if (mWithHeader)  
       itemCount=itemCount+1;  
     if (mWithFooter)  
       itemCount=itemCount+1;  
     return itemCount;  
   }  
   private boolean isPositionHeader(int position) {  
     return position == 0;  
   }  
   private boolean isPositionFooter(int position) {  
     return position == getItemCount() - 1;  
   }  
   protected VideoItem getItem(int position) {  
     return mWithHeader ? videoList.get(position - 1) : videoList.get(position);  
   }  
   private int getItemPosition(int position){  
     return mWithHeader ? position - 1 : position;  
   }  
   public class VideoViewHolder extends RecyclerView.ViewHolder {  
     protected ImageView vImage;  
     protected TextView vName;  
     protected TextView vDetails,vNew;  
     protected String vFilePath;  
     protected Context context;  
     protected  Bundle b;  
     protected int position;  
     public void clearAnimation()  
     {  
       this.clearAnimation();  
     }  
     public VideoViewHolder(View v) {  
       super(v);  
       vName = (TextView) v.findViewById(R.id.media_name);  
       vImage = (ImageView) v.findViewById(R.id.media_img_bck);  
       vDetails = (TextView) v.findViewById(R.id.media_details);  
       v.setOnClickListener(new View.OnClickListener() {  
         @Override  
         public void onClick(View v) {  
           Intent movieIntent = new Intent();  
           movieIntent.setAction(android.content.Intent.ACTION_VIEW);  
           movieIntent.setDataAndType(Uri.parse(vFilePath), "video/*");  
           context.startActivity(movieIntent);  
         }  
       });  
     }  
   }  
   public class headView extends RecyclerView.ViewHolder {  
     protected TextView vName;  
     protected Context context;  
     protected  Bundle b;  
     protected int position;  
     public headView(View v) {  
       super(v);  
       vName = (TextView) v.findViewById(R.id.gallery_title);  
     }  
   }  
   public class footer extends RecyclerView.ViewHolder {  
     protected Context context;  
     protected int position;  
     public footer(View v) {  
       super(v);  
     }  
   }  
 }  

4. Create MainActivity.java file

Till now we have created our all supporting calls and finally we have to modify your MainActivity.java, so modify it as given below.

 package com.debugandroid.VideoGallery;  
 import android.support.v7.app.AppCompatActivity;  
 import android.os.Bundle;  
 import android.support.v7.widget.GridLayoutManager;  
 import android.support.v7.widget.RecyclerView;  
 import android.util.Log;  
 import java.util.ArrayList;  
 import java.util.List;  
 public class MainActivity extends AppCompatActivity {  
   private MediaQuery mediaQuery;  
   private List<VideoItem> videoItemList;  
   private RecyclerView recyclerView;  
   private VideoAdapter videoAdapter;  
   @Override  
   protected void onCreate(Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.activity_main);  
     recyclerView= (RecyclerView) findViewById(R.id.recyclerView);  
     videoItemList=new ArrayList<VideoItem>();  
     mediaQuery=new MediaQuery(this);  
     videoItemList=mediaQuery.getAllVideo();  
     Log.d("VideoList","Count:"+videoItemList.size());  
     videoAdapter=new VideoAdapter(videoItemList,this,"Gallery",true,false);  
     GridLayoutManager glm = new GridLayoutManager(this, 2);  
     glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {  
       @Override  
       public int getSpanSize(int position) {  
         switch (videoAdapter.getItemViewType(position)) {  
           case 0:  
             return 2;  
           case 1:  
             return 1;  
           case 2:  
             return 2;  
           default:  
             return 1;  
         }  
         // return (position == 0||position==1||position==2) ? 2 : 1;  
       }  
     });  
 //    GridLayoutManager gridLayoutManager=new GridLayoutManager(this,2);  
     recyclerView.setLayoutManager(glm);  
     recyclerView.setAdapter(videoAdapter);  
   }  
 }  

5.Setting permission for Video Gallery

Lastly you have to setup the permission to read the all video from storage. In api level 21 or higer you have to write some code as well. So add below permission in your AndroidManifest.xml.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

So our Video Gallery is read to test, you can run and use it, even you can play your video.

I have tried to keep it very simple but if you have any query or doubt than comment below or you may refer older post.
If you like this tutorial want to be in touch then you can like us on Facebook, Tiwtter and Google+
Source Code is available on https://github.com/debugandroid/VideoGallery

Get Email Updates!

Signup now receive an email once I publish new content. I will never give away, trade or sell your email address. You can unsubscribe at any time.

Join 911 other subscribers

This Post Has 11 Comments

  1. Hi,

    It’s a gerat tutorial…how to get video folder names ..when I click folder name next screen show videos in that folder…

    Thanks

    1. Hi Hima,

      To get the video by album you need to create the two method in mediaquery.java class.
      1. To get the list of all folder/album create below method.
      public List getVideoAlbum(){
      videoAlbums=new ArrayList();
      String[] PROJECTION_BUCKET = { MediaStore.Video.VideoColumns.BUCKET_ID,
      MediaStore.Video.VideoColumns.BUCKET_DISPLAY_NAME, MediaStore.Images.ImageColumns.DATE_TAKEN,
      MediaStore.Video.VideoColumns.DATA };

      String BUCKET_GROUP_BY = “1) GROUP BY 1,(2”;
      String BUCKET_ORDER_BY = “MAX(datetaken) DESC”;

      Uri video = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;

      Cursor cur = context.getContentResolver().query(video, PROJECTION_BUCKET,
      BUCKET_GROUP_BY, null, BUCKET_ORDER_BY);

      if(cur!=null)
      if (cur.moveToFirst()) {
      String bucket;
      String date;
      String data;
      long bucketId;

      int bucketColumn = cur
      .getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);

      int dateColumn = cur
      .getColumnIndex(MediaStore.Images.Media.DATE_TAKEN);
      int dataColumn = cur.getColumnIndex(MediaStore.Images.Media.DATA);

      int bucketIdColumn = cur
      .getColumnIndex(MediaStore.Images.Media.BUCKET_ID);

      do {
      // Get the field valuesA

      bucket = cur.getString(bucketColumn);
      date = cur.getString(dateColumn);
      data = cur.getString(dataColumn);
      bucketId = cur.getInt(bucketIdColumn);
      if(bucket!=null && bucket.length()>0) {

      /* videoItem.set_ID(cursor.getString(0));
      videoItem.setARTIST(cursor.getString(1));
      videoItem.setTITLE(cursor.getString(2));
      videoItem.setDATA(cursor.getString(3));
      videoItem.setDISPLAY_NAME(cursor.getString(4));
      videoItem.setDURATION(cursor.getString(5));
      */
      VideoItem videoItem = new VideoItem();
      videoItem.set_ID(cur.getString(0));
      videoItem.setDISPLAY_NAME(bucket);
      videoItem.setDATA(data);
      //videoItem.setData(data);
      //videoItem.setTotalCount(photoCountByAlbum(bucket));
      // PhotoGallery photoGallery=new PhotoGallery(bucket,data);
      videoAlbums.add(videoItem);
      Log.v(“ListingImages”, ” bucket=” + bucket
      + ” date_taken=” + date + ” _data=” + data
      + ” bucket_id=” + bucketId);
      }

      } while (cur.moveToNext());
      }
      if(cur!=null&&!cur.isClosed())
      cur.close();

      return videoAlbums;
      }

      2. call this method on click event on album
      public List getVideoByAlbum(String bucketName) {
      try {
      String orderBy = MediaStore.Images.Media.DATE_TAKEN;
      String searchParams = null;
      String bucket = bucketName;
      searchParams = “bucket_display_name = \”” + bucket + “\””;
      String[] PROJECTION_BUCKET = { MediaStore.Video.VideoColumns._ID,
      MediaStore.Video.VideoColumns.DISPLAY_NAME,
      MediaStore.Video.VideoColumns.DATE_TAKEN,
      MediaStore.Video.VideoColumns.DATA,
      MediaStore.Video.VideoColumns.DURATION};

      Cursor mVideoCursor;

      mVideoCursor = context.getContentResolver().query(
      MediaStore.Video.Media.EXTERNAL_CONTENT_URI, PROJECTION_BUCKET,
      searchParams, null, orderBy + ” DESC”);

      if (mVideoCursor!=null) {
      if (mVideoCursor.moveToFirst()) {
      String _id;
      String date;
      String data;
      String displayName;
      String duration;
      int idColumn = mVideoCursor
      .getColumnIndex(MediaStore.Video.Media._ID);
      int bucketColumn = mVideoCursor
      .getColumnIndex(MediaStore.Video.Media.DISPLAY_NAME);

      int dateColumn = mVideoCursor
      .getColumnIndex(MediaStore.Video.Media.DATE_TAKEN);
      int dataColumn = mVideoCursor.getColumnIndex(MediaStore.Video.Media.DATA);
      int durationColumn=mVideoCursor.getColumnIndex(MediaStore.Video.Media.DURATION);
      videoItemByAlbum = new ArrayList();
      do{
      date = mVideoCursor.getString(dateColumn);
      data = mVideoCursor.getString(dataColumn);
      displayName = mVideoCursor.getString(bucketColumn);
      duration=mVideoCursor.getString(durationColumn);

      VideoItem albumVideo = new VideoItem();
      albumVideo.setDISPLAY_NAME(displayName);
      albumVideo.setDATA(data);
      albumVideo.setDURATION(duration);
      videoItemByAlbum.add(albumVideo);

      }while (mVideoCursor.moveToNext());
      // cursorData.addAll(MediaUtils.extractMediaList(mVideoCursor,
      // MediaType.PHOTO));
      // mediaAdapter.notifyDataSetChanged();

      }

      }
      } catch (Exception e) {
      e.printStackTrace();
      }
      return videoItemByAlbum;
      }
      Let me know in case of any further query

  2. Sir , I am not able to create slider for my images .
    It should be like when I click on a image ,it should take Me to another activity and then I should be able to slide left right to view other images from the gallery, please help sir ,I am very badly stuck .
    Hoping to get reply from you soon sir ,thank you

    1. Use the viewpager to create the slider –
      Step1: On click event start the new activity with following data with Intent
      a: Array of all image url
      b: current position of click event
      Step2: Use the viewpager in your new activity to render the all image and show on the screen

      Below is the sample ViewPager adapter code

      public class PhotoPagerAdapter extends PagerAdapter {

      private final static int FADE_DURATION = 1000;
      private List IMAGES;
      private LayoutInflater inflater;
      private Context context;
      private Matrix matrix = new Matrix();

      public PhotoPagerAdapter(Context context,List IMAGES) {
      this.context = context;
      this.IMAGES=IMAGES;
      inflater = LayoutInflater.from(context);
      }

      @Override
      public void destroyItem(ViewGroup container, int position, Object object) {
      container.removeView((View) object);
      }

      @Override
      public int getCount() {
      return IMAGES.size();
      }

      @Override
      public Object instantiateItem(ViewGroup view, int position) {
      View imageLayout = inflater.inflate(R.layout.slidingimageslayout, view, false);

      assert imageLayout != null;
      PhotoView imageView = (PhotoView) imageLayout
      .findViewById(R.id.image);

      GlideApp.with(context)
      .load(IMAGES.get(position).getData())
      //.thumbnail(0.2f)
      .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
      .skipMemoryCache(false)
      .into(imageView);

      view.addView(imageLayout, 0);

      return imageLayout;
      }
      private void setFadeAnimation(View view) {
      AlphaAnimation anim = new AlphaAnimation(0.0f, 1.0f);
      anim.setDuration(FADE_DURATION);
      view.startAnimation(anim);
      }
      @Override
      public boolean isViewFromObject(View view, Object object) {
      return view.equals(object);
      }

      @Override
      public void restoreState(Parcelable state, ClassLoader loader) {
      }
      public Point getDisplaySize(Display display) {
      Point size = new Point();

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
      display.getSize(size);
      } else {
      int width = display.getWidth();
      int height = display.getHeight();
      size = new Point(width, height);
      }

      return size;
      }
      @Override
      public Parcelable saveState() {
      return null;
      }

      @Override
      public int getItemPosition(Object object) {

      return POSITION_NONE;
      }
      }

Leave a Reply

Close Menu
%d bloggers like this: