ListView 覆盖图片一部分,下拉显示全部。类似百度音乐专辑界面

界面布局使用FrameLayout,ImageView在最底层,给listview设置一个空白headerview,显示一部分imageview,下拉listview显示全部imageview

布局文件:

<?xml version="1.0" encoding="utf-8"?>


<FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">


    <ImageView
            android:id="@+id/online_album_detail_imageview"
            android:layout_width="match_parent"
            android:layout_height="333dp"
            android:layout_gravity="top"
            />


    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:layout_width="fill_parent"
                    android:layout_height="match_parent"
                    android:gravity="center_vertical"
                    android:orientation="vertical" >
        <fineos.widget.listview.BounceListView
                android:id="@+id/online_album_detail_listview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_above="@+id/online_album_detail_palyerbar"
                android:drawSelectorOnTop="false"
                android:fastScrollAlwaysVisible="false"
                android:fastScrollEnabled="false"
                android:scrollbars="none"
                android:descendantFocusability="blocksDescendants"
                android:divider="@null"
                />


        <include  android:layout_alignParentBottom="true"
                  android:id="@+id/online_album_detail_palyerbar"
                  layout="@layout/player_bar" ></include>
    </RelativeLayout>


</FrameLayout


headerview的布局文件:

<?xml version="1.0" encoding="utf-8"?>


<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:focusableInTouchMode="false"
              android:orientation="vertical"
              android:descendantFocusability="blocksDescendants"
              android:layout_width="match_parent"
              android:layout_height="wrap_content">


    <View android:layout_width="match_parent" android:layout_height="300dp"
          android:focusable="false"
            android:clickable="false"></View>
    <TextView android:layout_width="fill_parent" android:layout_height="50dp"
              android:id="@+id/online_album_detail_tv"
              android:maxLines="2"
              android:textSize="@dimen/text_size_medium"
              android:layout_centerVertical="true"
              android:ellipsize="end"
              android:textColor="@color/white"
              android:layout_gravity="bottom"
            />
</FrameLayout

mHeaderView = layoutInflater.inflate(R.layout.online_album_detail_header, mListView, false);
        mImageView = (ImageView) findViewById(R.id.online_album_detail_imageview);
        mTextView = (TextView) mHeaderView.findViewById(R.id.online_album_detail_tv);
        mListView = (BounceListView) findViewById(R.id.online_album_detail_listview);
        mListView.addHeaderView(mHeaderView, null, false);//false 表示headerview不可被点击
        mListView.setMaxYOverscrollDistance(60);
        mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView absListView, int i) {


            }


            @Override
            public void onScroll(AbsListView absListView, int i, int i2, int i3) {
                mImageView.setTop(mHeaderView.getTop());
            }
        });


其中有一个listview下拉回弹效果,参考http://blog.csdn.net/eastman520/article/details/19043973


其中有一个问题,listview设置背景时,headerview也会设置背景,imageview被完全覆盖掉,显示不出来,原理参考


如果去掉背景listview又是全部透明的,不能覆盖隐藏不显示的那部分imageview

解决方法,可以在 adapter里面给每个item设置背景。


你可能感兴趣的:(android,ListView,addHeaderView,listview回弹效果)