screenshot of all Views in ViewPager - android

I have a ViewPager that consist of List of ScrollViews. I want to make a screenshot from all of the Scrollviews after the first load of the ViewPager.
After ViewPager is created, i am going through the Views and creating bitmaps, but i get a screenshot only for the first pages that are loaded offscreen.
If i use the command:
pager.setOffscreenPageLimit(totalPages);
than I am able to get all of the screenshots. However this approach is memory consuming and my app crashes with outOfMemory when the ViewPager consists of a lot of pages.
Is there a way to create screenshot of all the views even the ones that are not preloaded - offScreen?

If you don't set offScreenPageLimit(totalPages), ViewPager will initially only load 1 more page other than you see. That means other pages will not be even created until you swipe there. That also means you cannot take screenshot of a screen/layout that is not created/inflated yet. And yes, it is not a good practice memorywise to set offscreen page limit to a number that ViewPager loads all pages at start.
Answer: No, if you mind your memory consumption. Otherwise, yes.

Related

What is the best way to display multiple ImageViews in a fragment?

The images in my fragment are slow to show? or load?
I have a constraint layout that displays up to about 40 various ImageViews. All videos are shown simultaneously. When I navigate to the fragment it can take up to a second or two for the navigation to end.
The images are in my project as drawables and programmatically found by their drawable id and displayed programmatically, not in a list.
How can I do this better for a better experience?
While using RecyclerView with GridLayoutManager would make your life really easy, If you are really not willing then here's a few suggestions:
I am assuming by referring to time taken for navigation you are saying that the actual transition from a fragment/activity to this particular fragment happens really slowly. So for most of the time you are staring at a blank screen.
i) first, place some blank placeholder images to your ImageViews. So that the user at least knows that the app hasn't stopped responding.
ii) secondly, if you are using any of the onCreate(), onCreateView(), onViewCreated() methods to initialize your ImageViews programmatically, I suggest you move this code to onStart() method of your fragment.
iii) lastly, use Glide library to asynchronously load your ImageViews with the images.

android -Need some suggestion for making a viewpager for very big datas

I want to make a leitner application . the data is coming from database .
For instance , I've about 500 rows in my database and I want to make a viewpager for showing them , each row comes on one page so I'll have 500 pages in the viewPager .
The question is , What is the best way to implement something like this ? is it going to have memory problems or something ?
What are the better ways to do so ? if no other way ,What type of viewPager is better to use for database? A fragment viewAdapter for example
For this you should use a normal ViewPager with FragmentStatePagerAdapter.
As described in documentation
This version of the pager is more useful when there are a large number
of pages, working more like a list view. When pages are not visible to
the user, their entire fragment may be destroyed, only keeping the
saved state of that fragment. This allows the pager to hold on to much
less memory associated with each visited page as compared to
FragmentPagerAdapter at the cost of potentially more overhead when
switching between pages.

Android ViewPager Gallery

I am using a view pager to show a list of images, it works fine but the main issue is that when I swipe between images, there is some kind of fading between images.
for example if I have 5 pictures and the first one is visible when i swipe the second one is visible directly.
if i decided to swipe faster, it shows white screen then the image appears "moving from first to third quickly - as example".
I think the fragment is being recycled - is there any way to avoid this ??
It's hard to tell with no details on your implementation, but just to answer your last question (I'm not sure if it will necessarily solve your problem) - if you are using a fragments in your ViewPager and are currently using a FragmentStatePagerAdapter, you can switch to a FragmentPagerAdapter, which will keep the fragments in memory (although it will of course use more memory, so you might not want to do it if you have a large number of fragments in your ViewPager). You can also specify how many offscreen pages for the ViewPager to keep using
mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(2);
In the above case it would keep 2 pages on each side of the currently viewed page. Sorry, I would have confirmed the specific problem with you before posting this answer, but I don't have the status yet :(

Preloading ViewPager Pages - because of lag

Is this possible to preload Fragments for ViewPager so that there's no lag when user swipes to next page? I've been trying two kinds of adapters but there's no use in switching from Fragmentstatepageradapter (I am using fragments to generate N pages) to fragmentpageadapter. I've got a lot of bitmaps to load in my pages. Setting viewpager offscreen pages doesn't help. Is there a way to preload them and inflate in backgdound? I know this is a silly question but I am a bit desperate about performance. Basically in my app when user scrolls to next page there is kind of lag, just between pages, and it's so annoying... Please help or point the right direction. I am targeting Gingerbread so I need to use that what Android Support gives.
Is this possible to preload Fragments for ViewPager so that there's no lag when user swipes to next page?
Sure. Have your adapter preload the fragments. You are responsible for returning fragments in getItem() -- whether those are "preloaded" or not is your job.
That being said, your problem most likely is not with the fragments themselves, but something that the fragments are doing. For example, you "got a lot of bitmaps to load in my pages", and if you are doing work related to those on the main application thread (e.g., using BitmapFactory), you are causing your own lag.
So, instead of racing off to "preload" stuff, a talented programmer would find out specifically what is causing the lag, using tools like Traceview. Then, and only then, would a talented programmer start working on a fix.

Android Viewpager with asynctasks (spinner while page is loading)

I want a Viewpager that shows loading while content is coming in from the background. Basically I expect the first View to be loaded, but View+1 and View-1 will still be loading. If the user swipes to either side I want them to be presented with a spinning dialog while it loads
Would I just add AsyncTasks into the ViewPager with some conditions determining when they will run? I dont want too many AsyncTasks to be loading as the viewpager will have many views off to the sides.
I think the Trulia app does this, it is similar to what I am looking for. Apartment image viewing shows a loading screen while the images are loading in that viewpage.
Also for the record, can I just treat viewpagers like onCreate functions of an activity? That would really clear things up
Insight appreciated
Have a look at the supplied FragmentPagerAdapter if you want to perform more Activity-like lifecycle management of each page.

Categories

Resources