Skip to content

Instantly share code, notes, and snippets.

@jpardogo
Created May 28, 2014 16:30
Show Gist options
  • Save jpardogo/70143625771697844896 to your computer and use it in GitHub Desktop.
Save jpardogo/70143625771697844896 to your computer and use it in GitHub Desktop.
Demostration of the implementation of an auto-scroll ListView in Android. This gist is a reference for the blog post How to autoscroll a ListView at http://blog.jpardogo.com/autoscroll-a-listview-with-listviewautoscrollhelper/
package com.jpardogo.android.myapplication.app;
import android.app.ListActivity;
import android.support.v4.widget.AutoScrollHelper;
import android.support.v4.widget.ListViewAutoScrollHelper;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
public class AutoScrollListActivity extends ListActivity implements View.OnTouchListener, AbsListView.OnScrollListener {
private ListViewAutoScrollHelper mScrollHelper;
private ListView mListView;
private int TOTAL_ITEMS = 2000;
private boolean mActionDown;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initList();
mListView.setOnScrollListener(this);
mListView.setOnTouchListener(this);
mListView.setSelection(TOTAL_ITEMS / 2);
initScrollHelper();
startAutoScroll();
}
private void initList() {
final ArrayList<String> items = new ArrayList<String>();
for (int i = 0; i < TOTAL_ITEMS; ++i) {
items.add("position: " + i);
}
final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, items);
mListView = getListView();
mListView.setAdapter(adapter);
}
private void initScrollHelper() {
mScrollHelper = new ListViewAutoScrollHelper (mListView) {
@Override
public void scrollTargetBy(int deltaX, int deltaY) {
mListView.smoothScrollBy(2, 0);
}
};
mScrollHelper.setEnabled(true);
mScrollHelper.setEdgeType(AutoScrollHelper.EDGE_TYPE_OUTSIDE);
}
private void startAutoScroll() {
getListView().post(new Runnable() {
@Override
public void run() {
forceScroll();
}
});
}
private void forceScroll() {
MotionEvent event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(), MotionEvent.ACTION_MOVE, mListView.getX(), -1, 0);
mScrollHelper.onTouch(getListView(), event);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mActionDown=true;
break;
case MotionEvent.ACTION_UP:
mActionDown=false;
break;
}
return mScrollHelper.onTouch(v, event);
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case SCROLL_STATE_IDLE:
if(!mActionDown){
forceScroll();
}
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
}
@Kisty
Copy link

Kisty commented Feb 15, 2018

Thanks for this! Link is broken. Working on is https://medium.com/@jpardogo/how-to-autoscroll-a-listview-c78bf54702e4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment