我有一种滑动面板(借助Android中的状态栏等手势移动)和嵌入式ListView。 滑动面板可能处于两种状态:
是否可以实现以下行为:面板处于第2状态,用户使用手势滚动ListVIew,当ListView滚动到顶部时,下一次滚动使滑动面板移动到其第一状态(该面板跟随用户的触摸,它会到达屏幕的底部)?
在Android上的Google地图应用中,组织的信息卡中也实现了类似的行为。
答案 0 :(得分:0)
您可以使用以下布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
以下代码:
public class Example extends Activity implements OnScrollListener {
private ListView listview;
private View stickyText;
private View content;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
content = findViewById(android.R.id.content);
listview = (ListView) findViewById(R.id.list);
stickyText = findViewById(R.id.text);
listview.setOnScrollListener(this);
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
listview.setPadding(0, height, 0, 0);
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
stickyText.setTranslationY(Math.max(content.getHeight() - stickyText.getHeight(), view.getChildAt(1).getTop()));
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
}
我不完全确定这段代码是否会正常工作(我只是在没有真正尝试的情况下编写它),但基本的想法非常简单。您的列表视图顶部有填充,等于屏幕高度。您还有一个覆盖列表视图的Textview。根据您滚动列表视图的程度,您可以将该文本视图转换为到达屏幕顶部的位置。