介绍ListView中的几种位置关系和LayoutAnimation在listview中的应用

ListView的属性:

1.ListView的XML属性
android:divider//在列表条目之间显示的drawable或color

android:dividerHeight//用来指定divider的高度

android:entries//构成ListView的数组资源的引用。对于某些固定的资源,这个属性提供了比在程序中添加资源更加简便的方式

android:footerDividersEnabled//当设为false时,ListView将不会在各个footer之间绘制divider.默认为true。

android:headerDividersEnabled//当设为false时,ListView将不会在各个header之间绘制divider.默认为true。
  2.继承自AbsListView的XML属性

android:cacheColorHint// 表明这个列表的背景始终以单一、固定的颜色绘制,可以优化绘制过程。

android:choiceMode//为视图指定选择的行为。可选的类型有:none、singleChoice、multipleChoice、multipleChoiceModal。

android:drawSelectorOnTop// 若设为true,选择器将绘制在选中条目的上层。默认为false。

android:faseScrollEnabled// 设置是否允许使用快速滚动滑块。

android:listSelector// 设置选中项显示的可绘制对象,可以是图片或者颜色属性。

android:scrollingCache// 设置在滚动时是否使用绘制缓存。若设为true,则将使滚动表现更快速,但会占用更内存。默认为true。

android:smoothScrollbar// 为真时,列表会使用更精确的基于条目在屏幕上的可见像素高度的计算方法。默认该属性为真,如果你的适配器需要绘制可变高的条目,他应该设为假。当该属性为真时,你在适配器在显示变高条目时,滚动条的把手会在滚动的过程中改变大小。当设为假时,列表只使用适配器中的条目数和屏幕上的可见条目来决定滚动条的属性。

android:stackFromBottom// 设置GridView和ListView是否将内容从底部开始显示。

android:textFilterEnabled// 当设为真时,列表会将结果过滤为用户类型。前提是这个列表的Adapter必须支持Filterable接口。

android:transcriptMode//设置列表的transcriptMode.有如下选项可选:
//(1)disabled          禁用TranscriptMode,也是默认值;
//(2)normal             当新条目添加进列表中并且已经准备好显示的时候,列表会自动滑动到底部以显示最新条目;
//(3)alwaysScroll   列表会自动滑动到底部,无论新条目是否已经准备好显示.

一个例子:

<ListView
        android:layout_below="@id/btn"
        android:id="@+id/draggable_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_marginBottom="5dip"
        android:cacheColorHint="#f4f4f4"
        android:fadingEdge="none"
        android:listSelector="#f4f4f4"
        android:paddingLeft="16dip"
        android:paddingRight="16dip"
        android:transcriptMode="alwaysScroll"
        android:layoutAnimation="@anim/layout_bottom_to_top_slide" />


layout_bottom_to_top_slide

<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
        android:delay="30%"
        android:animation="@anim/slide_right" />
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
    <translate android:fromXDelta="-100%p" android:toXDelta="0"
            android:duration="@android:integer/config_shortAnimTime" />
</set>

一个小例子说明listview的item的位置关系:

public class MainActivity extends Activity {

	private ArrayList<String> myList = new ArrayList<String>();
	private ArrayAdapter<String> myAdapter;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		final ListView list = (ListView) findViewById(R.id.draggable_list);
		
		myList.add("11");
		myList.add("22");
		myList.add("33");
		myList.add("44");
		myList.add("55");
		myList.add("66");
		myList.add("77");
	
		myAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, myList);
		LayoutInflater inflater = LayoutInflater.from(this);
		TextView header = (TextView)inflater.inflate(R.layout.header, null);
		TextView footer = (TextView)inflater.inflate(R.layout.footer, null);

		list.addFooterView(footer);
		list.setOnTouchListener(new OnTouchListener() {
			
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				
				float x = event.getX();
				float y = event.getY();
				print(list,x,y);
				return false;
			}
		});
		list.addHeaderView(header);
		
		list.setAdapter(myAdapter);
		Button btn = (Button)findViewById(R.id.btn);
		btn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				myList.add("88");
				myList.add("99");
				myList.add("aa");
				myAdapter.notifyDataSetChanged();
				
			}
		});
		
		
	}

	
	private void print(final ListView list,final float pointerX,float pointerY) {
		int firstVisiblePosition = list.getFirstVisiblePosition();  //在当前这一屏上的第一个listview的item的序号,包涵header,从0开始计算
		int lastVisiblePosition = list.getLastVisiblePosition();   //在当前这一屏上最后一个listview的item的序号,包含header和footer,从0开始计算

		int maxItemPosition = list.getCount() - list.getFooterViewsCount() - 1; // 这个不把footer view算进去 ,list.getCount()会把header和footer都算进去
		int minItemPosition = list.getHeaderViewsCount();
		 //这里的beginViewIndex指的是在这一个屏幕上显示的第一个list的item(不包含headerview)
		int beginViewIndex = (firstVisiblePosition > minItemPosition ? firstVisiblePosition : minItemPosition) - firstVisiblePosition;
		//这里的endViewIndex不包含footer view,不能通过adapter.getItem得到的不算
		int endViewIndex = (lastVisiblePosition < maxItemPosition ? lastVisiblePosition : maxItemPosition) - firstVisiblePosition;
		
		//这个是点击的view在当前屏幕的序号,从0开始计算
		int pointeredViewIndex = list.pointToPosition((int) pointerX, (int) pointerY) - firstVisiblePosition;

		
	  //这个是点击的view在当前屏幕的序号,从0开始计算,可以通过listview.getChild(pointeredViewIndex)得到这个item
       <span style="white-space:pre">	</span>        int pointeredItemPosition = pointeredViewIndex + firstVisiblePosition - minItemPosition;
        
		System.out.println("====firstVisiblePosition="+firstVisiblePosition+"lastVisiblePosition="+lastVisiblePosition);
		System.out.println("====beginViewIndex="+beginViewIndex+"endViewIndex="+endViewIndex+"maxItemPosition="+maxItemPosition+"minItemPosition="+minItemPosition);
		System.out.println("====pointeredViewIndex="+pointeredViewIndex);
	}
}

代码: http://download.csdn.net/detail/baidu_nod/7762055

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在QMLListView是一种非常常用的QML组件,用于以列表形式展示数据。ListView可以使用不同的数据模型来提供数据,从而实现灵活的数据展示和交互。 以下是几种常见的ListView数据模型: 1. ListModel模型:这是最常用的数据模型之一,它允许我们通过添加项目来动态修改和管理数据。可以通过在ListView外部创建一个ListModel对象,并将该对象作为ListView的model属性来实现。ListModel对象的每个项目都可以通过属性定义。可以使用JavaScript的API来操作ListModel的项目,如添加、删除、移动等。 2. ArrayDataModel模型:这种数据模型适用于静态数据。在QML,我们可以使用JavaScript数组来初始化数据,并将该数组作为ListView的model属性值。此模型基于JavaScript数组,并且不允许对数据进行修改。如果需要对数据进行更改,需要先将数组的数据复制到一个新的数组,然后将新数组作为model。 3. XmlListModel模型:这个模型是XML数据源的绑定模型。它可以从远程或本地XML文件提取数据,并在ListView展示。可以在XmlListModel指定XML文件的路径,然后使用XmlRole来定义需要展示的数据。XmlListModel可以通过一系列XPath表达式来过滤和排序数据。 4. SqlListModel模型:这个模型是用于绑定SQL数据库的数据模型。可以通过指定SQL查询语句来从数据库获取数据,并在ListView展示。可以使用roleNames属性来定义在ListView展示哪些数据。SqlListModel还具有数据过滤和排序功能。 总的来说,QMLListView可以使用多种数据模型来展示不同类型的数据。无论是动态数据还是静态数据,XML数据源还是SQL数据库,都可以通过适当选择数据模型来满足个性化的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值