public class ListViewScrollTestActivity extends Activity implements View.OnClickListener {
private ListView mListView;
private Button up;
private Button down;
private Button off;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listview_scroll);
up = (Button) findViewById(R.id.up);
down = (Button) findViewById(R.id.down);
off = (Button) findViewById(R.id.off);
up.setOnClickListener(this);
down.setOnClickListener(this);
off.setOnClickListener(this);
mListView = (ListView) findViewById(R.id.listview);
List<String> list = new ArrayList<>();
for (int i = 0; i < 40; i++) {
list.add("list: " + i);
}
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list);
mListView.setAdapter(adapter);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.up:
listScrollUp();
break;
case R.id.down:
listScrollDown();
break;
case R.id.off:
listScrollOff();
break;
default:
break;
}
}
/**
* 方法postDelayed的作用是延迟多少毫秒后开始运行,
* 而removeCallbacks方法是删除指定的Runnable对象,使线程对象停止运行。
*/
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// handler.removeCallbacks(run_scroll_down);
// handler.removeCallbacks(run_scroll_up);
}
};
/**
* 向上滚动
*/
public void listScrollUp() {
listScrollOff();
handler.postDelayed(run_scroll_up, 0);
}
/**
* 向下滚动
*/
public void listScrollDown() {
listScrollOff();
handler.postDelayed(run_scroll_down, 0);
}
/**
* 停止滚动
*/
public void listScrollOff() {
handler.removeCallbacks(run_scroll_down);
handler.removeCallbacks(run_scroll_up);
// Message message = handler.obtainMessage();
// handler.sendMessage(message);
}
Runnable run_scroll_up = new Runnable() {
@Override
public void run() {
/**
* Android源码中对listview.smoothscrollby(int, int)方法解释:
* Smoothly scroll by distance pixels over duration milliseconds.
* Parameters:
* distance Distance to scroll in pixels.
* duration Duration of the scroll animation in milliseconds.
*
*/
mListView.smoothScrollBy(10, 10);
handler.postDelayed(run_scroll_up, 10);
}
};
Runnable run_scroll_down = new Runnable() {
@Override
public void run() {
mListView.smoothScrollBy(-10, 10);
handler.postDelayed(run_scroll_down, 10);
}
};
}
通过代码控制ListView上下滚动
最新推荐文章于 2021-09-30 14:51:18 发布