android - VideoView inside Fragment -


edit: thought had problem implementation of fragment caused videoview not work, turned out implementation correct , had problem layout xml of videoview. ill keep code example of correct implementation of videoview inside fragment using viewpager:)

this fragment:

import android.content.context; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.media.mediaplayer; import android.media.thumbnailutils; import android.net.uri; import android.os.bundle;  import android.provider.mediastore; import android.support.v4.app.fragment; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.imageview; import android.widget.mediacontroller; import android.widget.textview; import android.widget.videoview;  import uk.co.senab.photoview.photoview; import uk.co.senab.photoview.photoviewattacher;   public class screenslidepagefragment extends fragment {      private context context = null; //todo make setter     private string filename;     private final string file_name = "file_name";      /**      * factory method fragment class. constructs new fragment.      */     public static screenslidepagefragment create(string filename, context context) {         screenslidepagefragment fragment = new screenslidepagefragment();         fragment.setfilename(filename);         fragment.setcontext(context);         return fragment;     }      public screenslidepagefragment() {      }      @override     public void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate); //        filename = getarguments().getstring(file_name);     }      @override     public view oncreateview(layoutinflater inflater, viewgroup container,                              bundle savedinstancestate) {         // inflate layout containing title , body text.         viewgroup rootview = (viewgroup) inflater                 .inflate(r.layout.fragment_screen_slide_page, container, false);          // set title view show page number.         string name = this.filename;         if (name != null) {             if (name.endswith(".jpg")) {                 bitmap mybitmap = bitmapfactory.decodefile(name);                 imageview view = (imageview) rootview.findviewbyid(r.id.imageview);                 view.setimagebitmap(mybitmap);                 photoviewattacher mattacher = new photoviewattacher(view);             }             if (name.endswith(".mp4")) {                 final videoview video = (videoview) rootview.findviewbyid(r.id.videoview);                  video.setonpreparedlistener(new mediaplayer.onpreparedlistener() {                     @override                     public void onprepared(mediaplayer mp) {                         video.requestfocus();                         video.start();                     }                 });                 video.setvideouri(uri.parse(name)); //                bitmap bitmap = thumbnailutils.createvideothumbnail("/storage/sdcard0/android/data/huji.ac.il.test/files/savedfiles/150401015447.mp4", mediastore.video.thumbnails.micro_kind); //                imageview view = (imageview) rootview.findviewbyid(r.id.imageview); //                view.setimagebitmap(bitmap);             }          }         return rootview;     }      public void setfilename(string filename) {         this.filename = filename;     }      public void setcontext(context context) {         this.context = context;     } } 

this layout "fragment_screen_slide_page.xml":

<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical" android:layout_width="fill_parent"     android:layout_height="fill_parent">     android:layout_gravity="center"      <imageview         android:id="@+id/imageview"         android:layout_width="fill_parent"         android:layout_height="fill_parent"         android:layout_margin="0dp"          />      <videoview         android:layout_width="fill_parent"         android:layout_height="fill_parent"         android:id="@+id/videoview"         android:layout_gravity="center_horizontal" />   </linearlayout> 

here activity usess fragment:

public class screenslideactivity extends fragmentactivity {       private viewpager mpager;     private pageradapter mpageradapter;     private arraylist<string> filenamelist;      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         view decorview = getwindow().getdecorview();         // hide status bar.         int uioptions = view.system_ui_flag_fullscreen;         decorview.setsystemuivisibility(uioptions);          setcontentview(r.layout.activity_screen_slide);          filenamelist=getimagesfromstorage();         // instantiate viewpager , pageradapter.         mpager = (viewpager) findviewbyid(r.id.pager);         mpageradapter = new screenslidepageradapter(getsupportfragmentmanager(), filenamelist,this);         mpager.setadapter(mpageradapter);      }      @override     public boolean oncreateoptionsmenu(menu menu) {         getmenuinflater().inflate(r.menu.menu_main, menu);         return true;     }      @override     public boolean onoptionsitemselected(menuitem item) {          int id = item.getitemid();          //noinspection simplifiableifstatement         if (id == r.id.action_settings) {             return true;         }          return super.onoptionsitemselected(item);     }      public arraylist<string> getimagesfromstorage()     {         arraylist<string> filenamelist= new arraylist<string>();         file file= new file(getapplicationcontext().getexternalfilesdir(null).getabsolutepath()+ file.separator + "savedfiles");          if (file.isdirectory())         {             file[] listoffiles= file.listfiles();             (int = 0; <listoffiles.length; i++)             {                  filenamelist.add(listoffiles[i].getabsolutepath());             }         }         return filenamelist;     }  } 

i tried turning on gpu acceleration post suggested didn't work. tried playing video on main activity instead on fragment , worked, im gussing problem fragment. suggestions?

edit:

the adapter:

public class screenslidepageradapter extends fragmentstatepageradapter {     private arraylist<string> filenames;     private context context=null;       public screenslidepageradapter(fragmentmanager fragmentmanager, arraylist<string> filenamelist,context context) {         super(fragmentmanager);         this.filenames=filenamelist;         this.context=context;     }       @override     public fragment getitem(int position) {          return screenslidepagefragment.create(filenames.get(position),this.context);     }      @override     public int getcount() {         return filenames.size();     } } 

you need make sure have set:

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

in androidmanifest.xml

also, think you're not starting video @

in videoview initialisation can access mediaplayer within videoview using:

videoview video = (videoview) rootview.findviewbyid(r.id.videoview); video.setonpreparedlistener(new mediaplayer.onpreparedlistener() {                 @override                 public void onprepared(mediaplayer mp) {                     videoview.requestfocus();                     videoview.start();                 }   }); video.setvideouri(uri.parse(pathforthefile)); 

edit: local video your'e trying play, don't need wait mediaplayer prepared, should work:

videoview video = (videoview) rootview.findviewbyid(r.id.videoview);                video.setvideouri(uri.parse(pathforthefile)); video.start(); video.requestfocus(); 

so, wont need these lines:

mediacontroller mc=  new mediacontroller(getactivity());                 mc.setanchorview(video);                 video.setmediacontroller(mc);                 video.requestfocus(); 

let me know if worked


Comments

Popular posts from this blog

javascript - AngularJS custom datepicker directive -

javascript - jQuery date picker - Disable dates after the selection from the first date picker -