Android ListView的自动循环滚动

本人遇到一个项目需要将ListView设置固定的高度,但是数据列表的高度大于ListView的设置高度,需要将所有的数据都能展现出来。如果使用手动滑动会显得不够好,,就需要自动的滚动展示所有的数据。

在网上查了很多资料都不是很全面,综合网上的资料,完成一个能够使用的demo。不过在demo中,listview的item在滚动的时候会存在一个停顿现在,希望知道能够提供一下解决的方法。

在本例中主要使用的就是Timer的功能,上代码。

MainActivity 是加载数据和设置定时器。

public class MainActivity extends Activity{private ListView listView;private List<String> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView1); list = getList(); new Timer().schedule(new TimeTaskScroll(this, listView,list), 100, 100); } /** * 获取数据 */ public List<String> getList(){ List<String> list = new ArrayList<String>(); for (int i = 0; i < 10; i++) {list.add(String.valueOf(i));} return list; }}

public class TimeTaskScroll extends TimerTask {private ListView listView;public TimeTaskScroll(Context context, ListView listView, List<String> list){this.listView = listView;listView.setAdapter(new ListAdapter(context, list));}private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {listView.smoothScrollBy(10, 0);};};@Overridepublic void run() {Message msg = handler.obtainMessage();handler.sendMessage(msg);}}

在适配器中设置listview的数据Integer.MAX_VALUE,在滚动的同时能可以是循环的展示。

public class ListAdapter extends BaseAdapter {private List<String> list;private LayoutInflater mInflater;public ListAdapter(Context context, List<String> list){this.list = list;this.mInflater = LayoutInflater.from(context);}@Overridepublic int getCount() {return Integer.MAX_VALUE;}@Overridepublic Object getItem(int arg0) {return list.get(arg0 % list.size());}@Overridepublic long getItemId(int arg0) {return arg0 % list.size();}@Overridepublic View getView(int postition, View convertView, ViewGroup arg2) {ViewHoler viewHolder = null;if(convertView == null){viewHolder = new ViewHoler();convertView = mInflater.inflate(R.layout.activity_list_item, null);viewHolder.tvText = (TextView) convertView.findViewById(R.id.adapter_list_layout_tv);convertView.setTag(viewHolder);}else{viewHolder = (ViewHoler) convertView.getTag();}viewHolder.tvText.setText(list.get(postition % list.size()));return convertView;}static class ViewHoler{TextView tvText;}}

源码下载地址:

自己变得跟水晶一般透明,

Android ListView的自动循环滚动

相关文章:

你感兴趣的文章:

标签云: