居中+循环滚动的listview(1)

来源:互联网 发布:python 矩阵乘法 编辑:程序博客网 时间:2024/05/21 21:45

之前写过一篇用scrollview实现居中滚动效果的,考虑到listview的列表项的拓展性可能更加好,所以尝试使用listview来实现这个效果,并且加入了循环滚动。

先来看看效果图:

源文件就只有这3个:

以下是用到的2个布局文件activity_main.xml :

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <com.example.mylistview.MyListView        android:id="@+id/lv"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        /></LinearLayout>

list_item

<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/title"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:textSize="20sp"     android:focusable="true"    android:gravity="center"/>

然后是主activity,简单的获取资源并绑定数据:

package com.example.mylistview;import java.util.ArrayList;import java.util.List;import java.util.TimerTask;import android.app.Activity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.widget.ListView;public class MainActivity extends Activity {private MyListView listView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listView = (MyListView) findViewById(R.id.lv);listView.setAdapter(new MyAdapter(this, getData()));//移到列表中间listView.setSelection(Integer.MAX_VALUE/2);}private List<String> getData() {List<String> data = new ArrayList<String>();for(int i=0;i<20;i++){data.add("测试数据"+Integer.toString(i));}return data;}}



自定义的adapter继承baseadapter:

package com.example.mylistview;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class MyAdapter extends BaseAdapter {private Context context;private List<String> data;public MyAdapter(Context context, List<String> data) {this.context = context;this.data=data;}@Overridepublic int getCount() {return Integer.MAX_VALUE; //基本可以认为有无穷多项,从而实现循环。}@Overridepublic Object getItem(int position) {return data.get(position%data.size());}@Overridepublic long getItemId(int position) {return position%data.size();}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//这里是一个缓存的机制,不多说。ViewHolder holder;if (convertView == null) {holder = new ViewHolder();convertView = LayoutInflater.from(context).inflate(R.layout.list_item, null);holder.title = (TextView) convertView.findViewById(R.id.title);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.title.setText(data.get(position%data.size()));//循环读取数据return convertView;}static class ViewHolder {public TextView title;}}

篇幅有限,先说到这里。

居中+循环滚动的listview(2)点击打开链接

1 0
原创粉丝点击