XListVIew中headrView根布局必须是Linearlayout,并设置gravity="bottom" , 这样下拉时才会有被拉出来的效果,
根布局是其他布局时里面的控件大小等可能会跟随根布局大小动态改变,没有被拉出来的效果
ps:XListView实现原理:
继承自Listview,重写OnTouchEvent事件来处理手指滑动,当手指按下时记录按下的竖直方向绝对位置 (getRawY),
手指移动时再次获取绝对位置,与前一次绝对位置差值即为headerView要改变的高度,通过设置headerView的LayoutParameter来动态改变高度
当手指抬起时,使用Scroll滚动
<?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="wrap_content" android:id="@+id/ccc" android:gravity="bottom" > <RelativeLayout android:id="@+id/xlistview_header_content" android:layout_width="fill_parent" android:layout_height="60dp" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:gravity="center" android:orientation="vertical" android:id="@+id/xlistview_header_text"> <TextView android:id="@+id/xlistview_header_hint_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" w_header_hint_normal" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" iew_header_last_time" android:textSize="12sp" android:visibility="gone" /> <ImageView android:src="@drawable/ic_launcher" android:layout_width="wrap_content" android:layout_height="match_parent" android:textSize="12sp" /> </LinearLayout> </LinearLayout> <ImageView android:id="@+id/xlistview_header_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@id/xlistview_header_text" android:layout_centerVertical="true" android:layout_marginLeft="-35dp" /> <ProgressBar android:id="@+id/xlistview_header_progressbar" android:layout_width="26dp" android:layout_height="130dp" android:layout_marginTop="15dp" android:layout_alignLeft="@id/xlistview_header_text" android:layout_centerVertical="true" android:layout_marginLeft="-35dp" android:visibility="invisible" /> </RelativeLayout> </LinearLayout>
public class MainActivity extends Activity { @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ViewGroup group=(ViewGroup) findViewById(R.id.ccc); ViewGroup.LayoutParams layoutParams=group.getLayoutParams(); layoutParams.height=0; group.setLayoutParams(layoutParams); ObjectAnimator animator=ObjectAnimator.ofInt(group, "", 0,100); animator.setDuration(8000); animator.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { // TODO Auto-generated method stub Integer i=(Integer) animation.getAnimatedValue(); ViewGroup.LayoutParams layoutParams=group.getLayoutParams(); layoutParams.height=i; group.setLayoutParams(layoutParams); } }); animator.start();
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/qingchunweiliang/article/details/47657695