无法在Android上使用ListView在滑动面板上实现滑动+滚动行为

时间:2013-12-20 06:23:46

标签: android android-listview scroll panel swipe

我有一种滑动面板(借助Android中的状态栏等手势移动)和嵌入式ListView。 滑动面板可能处于两种状态:

  1. 它的标题位于屏幕的底部,只有一般 有关其内容的信息。
  2. 该面板是完全筛选的并且是用户 看到标题和ListView。
  3. 是否可以实现以下行为:面板处于第2状态,用户使用手势滚动ListVIew,当ListView滚动到顶部时,下一次滚动使滑动面板移动到其第一状态(该面板跟随用户的触摸,它会到达屏幕的底部)?

    在Android上的Google地图应用中,组织的信息卡中也实现了类似的行为。

1 个答案:

答案 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。根据您滚动列表视图的程度,您可以将该文本视图转换为到达屏幕顶部的位置。