1

我使用这个库,https://github.com/umano/AndroidSlidingUpPanel,我在里面放了一个listview,但是它不起作用,没有滚动,为什么?不仅listview,整个布局不滚动,也不带textview,也不带image,什么都没有。这是我的xml代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Detalhe_linha" 

    <com.sothree.slidinguppanel.SlidingUpPanelLayout
        android:id="@+id/sliding_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">


   <LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Próximo onibûs sai do ponto final em" />

    <TextView
        android:id="@+id/txtProx"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="X minutos"
        android:layout_gravity="center"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <GridView
        android:id="@+id/tabelaHorarios"
        android:layout_width="315dp"
        android:layout_height="match_parent"
        android:layout_x="0dp"
        android:layout_y="123dp"
        android:layout_gravity="center"
        android:numColumns="3" >

    </GridView>
</LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#CCCC"
            android:orientation="vertical">

              <TextView
                android:layout_width="match_parent"
                android:layout_height="34dp"
                android:gravity="center|bottom"
                android:text="Itinerário"
                android:textSize="16sp" />

            <TextView
                android:id="@+id/brought_by"
                android:layout_width="match_parent"
                android:layout_height="34dp"
                android:gravity="center|top"
                android:text="Arraste para cima"
                android:textSize="14sp"
                android:autoLink="web" />


               <TextView
                android:id="@+id/itinerarios"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center|top"
                android:text=""
                android:textSize="17sp"
                android:autoLink="web" />

        </LinearLayout> 
    </com.sothree.slidinguppanel.SlidingUpPanelLayout>
</LinearLayout>

顺便说一句,对不起我的英语不好。

4

3 回答 3

3

我发现问题在于 SlidingUpPanelLayout 拦截了触摸事件(onInterceptTouchEvent)。我的解决方案是重写(或覆盖)方法isDragViewHit,该方法已签入case MotionEvent.ACTION_DOWN并可能取消对给定触摸事件的拦截。

这是我的解决方案,如果面板扩展允许单击/滚动扩展子面板,则取消拦截。这也意味着您不能向下滑动展开的面板。我在单击按钮时实现了面板的折叠。检查实施,它将为您提供可能的想法。

private boolean isDragViewHit(int x, int y) {
    if(isExpanded()){
        //don't intercept touch if panel expanded
        return false;
    }
    else{
        //original implementation - only allow dragging on mDragView
        View v = mDragView != null ? mDragView : mSlideableView;
        if (v == null) return false;
        int[] viewLocation = new int[2];
        v.getLocationOnScreen(viewLocation);
        int[] parentLocation = new int[2];
        this.getLocationOnScreen(parentLocation);
        int screenX = parentLocation[0] + x;
        int screenY = parentLocation[1] + y;
        return screenX >= viewLocation[0] && screenX < viewLocation[0] + v.getWidth() &&
                screenY >= viewLocation[1] && screenY < viewLocation[1] + v.getHeight();
    }
}
于 2013-10-10T13:26:24.783 回答
3

更好的方法是定义一个 DragView。我使用 textView,它仅在我触摸 textView 时才会滑动。所有其他视图拦截点击!

于 2013-11-07T06:26:18.850 回答
1

我将把我的做法留在这里,以防其他人偶然发现这种情况。

正如 Juliatzin 所说,一个更简洁的解决方案是使用该方法定义一个 DragView,setDragView(...)而不是重写类方法。

为此,在您声明SlidingUpPanel菜单布局的 xml 文件中,您应该声明一个视图,无论您想要什么,都带有一个 id,例如:

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

 <LinearLayout ...>
     MAIN CONTENT
 </LinearLayout>

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#eee"
        android:orientation="vertical"
        android:clickable="true"
        android:focusable="false">

     Views you want to be able to click on your menu...

     <Button //This view will be the one that when touched on your SlidingUpPanel, said panel
             //will close and let the other Views capture click events. You could give it some
             //style so as to have it blend into the SlidingUpPanel if you don´t want it visible
        android:id="@+id/close_SlidingUpPanel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
       />

</LinearLayout>    

在您设置 SlidingUpPanel 的活动中,您将执行以下操作:

 SlidingUpPanelLayout layout = (SlidingUpPanelLayout) findViewById(R.id.sliding_up_panel);
 layout.setDragView(findViewById(R.id.close_SlidingUpPanel));

希望这很清楚,并且会有所帮助。默认情况下,我相信 DragView 设置为null,这意味着 SlidingUpPanel 的任何部分都使其可用于拖动,这就是为什么当您尝试“单击”其中一个孩子时它会关闭的原因。

于 2014-03-10T19:34:59.583 回答