android通过代码控制ListView上下滚动

本文将介绍一种通过代码控制ListView上下滚动的方法。

先上图:

按下按钮会触发ListView滚动或停止。

实现该功能并不难,下面给出主要代码MainActivity.java

package cn.guet.levide;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity implements OnClickListener {
	private Button btn_up, btn_down, btn_stop; // 三个按钮
	private ListView listview;
	private Adapter adapter;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		findBy();
		init();
	}

	private void init() {
		btn_up.setOnClickListener(this);
		btn_down.setOnClickListener(this);
		btn_stop.setOnClickListener(this);

		adapter = new Adapter(this);
		listview.setAdapter(adapter);
	}

	private void findBy() {
		btn_up = (Button) findViewById(R.id.btn_scroll_up);
		btn_down = (Button) findViewById(R.id.btn_scroll_down);
		btn_stop = (Button) findViewById(R.id.btn_scroll_stop);

		listview = (ListView) findViewById(R.id.listview);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn_scroll_down:
			listScrollDown();
			break;
		case R.id.btn_scroll_up:
			listScrollUp();
			break;
		case R.id.btn_scroll_stop:
			listScrollOff();
			break;
		}
	}

	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);
	}

	Runnable run_scroll_up = new Runnable() {
		@Override
		public void run() {
			/**
			 * public void smoothScrollBy (int distance, int duration)
			 *
			 * Added in API level 8 Smoothly scroll by distance pixels over duration milliseconds.
			 *
			 * Parameters
			 *     distance Distance to scroll in pixels.
			 *     duration Duration of the scroll animation in milliseconds.
			 */
			listview.smoothScrollBy(1, 10);
			handler.postDelayed(run_scroll_up, 10);
		}
	};
	Runnable run_scroll_down = new Runnable() {
		@Override
		public void run() {
			listview.smoothScrollBy(-1, 10);
			handler.postDelayed(run_scroll_down, 10);
		}
	};
}

实现ListView位置变动的是smoothScrollBy方法。

public void smoothScrollBy (int distance, int duration)
    Smoothly scroll by distance pixels over duration milliseconds.

Parameters
    distance  Distance to scroll in pixels.
    duration  Duration of the scroll animation in milliseconds.

工程源码:

Android listview 代码控制上下移动

时间: 2024-08-09 10:06:46

android通过代码控制ListView上下滚动的相关文章

Android 设置ListView不可滚动 及在ScrollView中不可滚动的设置

http://m.blog.csdn.net/blog/yusewuhen/43706169 转载请注明出处: http://blog.csdn.net/androiddevelop/article/details/38815493 希望得到的效果是ListView不能滚动,但是最大的问题在与ListView Item还必有点击事件,如果不需要点击事件那就简单了,直接设置ListView.setEnable(false); 如果还需要点击事件,滚动与点击都是在ListView Touch处理机制

android中控制ListView宽度和高度

============问题描述============ 给listveiw填充item布局都是wrap_content,listview自身也使用wrap_content,可是实际显示效果listview宽度都是全屏,求解决办法 item布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="wrap_content

“Win10 UAP 开发系列”之 在MVVM模式中控制ListView滚动位置

这个扩展属性从WP8.1就开始用了,主要是为了解决MVVM模式中无法直接控制ListView滚动位置的问题.比如在VM中刷新了数据,需要将View中的ListView滚动到顶部,ListView只有一个ScrollIntoView()方法可以控制滚动的位置,但最好在VM中不要出现直接控制View的代码,需要通过其他的方式. 使用一个扩展属性即可实现: /// <summary> /// 将ListView滚动到顶部 使用方法:在ListView增加扩展属性 /// ext:ListViewSc

【转】Android自定义Adapter的ListView的思路及代码

原文网址:http://www.jb51.net/article/37236.htm Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下 在开发中,我们经常使用到ListView这个控件.Android的API也提供了许多创建ListView适配器的快捷方式.例如ArrayAdapter.SimpleAdapter和SimpleCursorAdapter等.但你是否发现,如果采用这些系统自带的适配器,对于事件的响应只能局限在一个行单位.假设一行里面有一个按钮

Android 实现ListView不可滚动效果

希望得到的效果是ListView不能滚动,但是最大的问题在与ListView Item还必有点击事件,如果不需要点击事件那就简单了,直接设置ListView.setEnable(false); 如果还需要点击事件,滚动与点击都是在ListView Touch处理机制管理. ListView点击事件是复用ViewGroup的处理逻辑,当用户点击视图并且按下与抬起手指之间移动距离很小,满足点击事件的时间长度限制,就会触发点击事件. ListView滚动事件是自己处理,有两个判断条件,当用户触发mov

Android有感(9):10.使用XML文件和Java代码控制UI界面

Android推荐使用XML文件设置UI界面,然后用Java代码控制逻辑部分,这体现了MVC思想. MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑. 我们可以在app\src\main\res\layout目录下定义一个XML文件(R.java文件会自

android自定义控件之禁止ListView滚动

import android.content.Context; import android.util.AttributeSet; import android.widget.ListView; /** * 禁止滚动的ListView * Created by Administrator on 2015/10/21 0021. */ public class NoScrollListview extends ListView{ public NoScrollListview(Context co

Android 记录和恢复ListView滚动的位置的三种方法

本文主要介绍记录和恢复listView滚动位置的3种方法(1)记录listView滚动到的位置的坐标(推荐)(2)记录listView显示在屏幕上的第一个item的位置(3)通知适配器数据改变. 有时在view切换时,需要恢复listView之前滚动到的位置,鉴于网上已有资料说的都是第二种方法,而第二种方法本身在精确度上较差,自己找到了第一种方法分享下. 1.记录listView滚动到的位置的坐标,然后利用listView.scrollTo精确的进行恢复 listView.setOnScroll

160多个android开源代码汇总

第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style等等..其他 一.ListView android-pulltorefresh一个强大的拉动刷新开源项目,支持各种控件下拉刷新