I want a code to make the ScrollView
show the same images with endless scrolling over and over.
This is excelent for the layout and I want to know what
Use a ListView
and an Adapter
that is modified slightly to have "infinite" elements
Here are the changes to your the Adapter
that would support this behavior:
@Override
public int getCount()
{
return Integer.MAX_VALUE;
}
@Override
public ImageItem getItem(int position)
{
return mItems.get(position % mItems.size());
}
Essentially you trick it by telling it that the count is MAX_INT
and then when you go to get an item use mod to get correct item in the sequence.
Several people have proposed different solutions to this already as well.
See Here: Android Endless List
and CommonsWare has a component that supports this behavior as well: https://github.com/commonsguy/cwac-endless
FoamGuy's answer is correct. But in order to make the list go backwards, as in an infinite carrousel, I also trick the system by setting the default element to be Integer.MAX_VALUE/2 by calling:
listView.setSelection( Integer.MAX_VALUE/2 );
It is pretty unlikely the user will scroll back 1 billion elements back, which makes the effect of infinite carrousel in both directions.
I also have some other modifications to the BaseAdapter custom implementation:
@Override
public Object getItem(int position) {
if ( model.getSize()==0 ) {
return null;
}
// mod the list index to the actual element count
return model.getElementAtPosition( position%model.getSize() );
}
@Override
public long getItemId(int position) {
if ( model.getSize()==0 ) {
return -1;
}
// same as above
return model.getElementAtPosition( position%model.getSize() ).id;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if ( model.getSize()==0 ) {
return null;
}
// also make sure to point to the appropriate element in your model otherwise you
// would end up building millions of views.
position%=model.getSize();
View front= convertView;
if ( convertView==null ) {
// inflate/build your list item view
}
...
}
This way the list will spin around like in a carousel w/o extra memory allocation for unneeded views.