android:how to make infinite scrollview with endless scrolling

前端 未结 2 1367
旧巷少年郎
旧巷少年郎 2021-01-05 07:54

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

相关标签:
2条回答
  • 2021-01-05 08:02

    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

    0 讨论(0)
  • 2021-01-05 08:20

    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.

    0 讨论(0)
提交回复
热议问题