界面布局使用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.youkuaiyun.com/eastman520/article/details/19043973
其中有一个问题,listview设置背景时,headerview也会设置背景,imageview被完全覆盖掉,显示不出来,原理参考
如果去掉背景listview又是全部透明的,不能覆盖隐藏不显示的那部分imageview
解决方法,可以在 adapter里面给每个item设置背景。