您的位置:首页 > 编程语言

通过代码控制ListView上下滚动

2015-09-22 10:59 260 查看
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);
        }
    };
}


参考:http://www.bubuko.com/infodetail-656014.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: