没有句柄的SlidingDrawer和对内容的滑动操作

Raj*_*Raj 7 android android-widget

我想SlidingDrawer在我的应用程序中使用.但我必须隐藏handle并且必须显示20%的内容在SlidingDrawer关闭时可见.此外,我想分配所有的滑动(触摸或拖动)的行动handlecontent.如果有人为此解决问题,请帮助我.

请参考我尝试过的以下代码段.

<View
    android:id="@id/handle"
    android:layout_width="0dip"
    android:layout_height="fill_parent" />

<LinearLayout
    android:id="@id/content"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/sliding_drawer" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/sliding_drawer" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/sliding_drawer" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

这是我的活动:

     import android.app.Activity;
     import android.graphics.Color;
     import android.os.Bundle;
     import android.view.View;
     import android.widget.SlidingDrawer;
     import android.widget.SlidingDrawer.OnDrawerCloseListener;
     import android.widget.SlidingDrawer.OnDrawerOpenListener;

     public class SlidingDrawerActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final SlidingDrawer drawer = (SlidingDrawer) findViewById(R.id.drawer);
        drawer.setOnDrawerCloseListener(new OnDrawerCloseListener() {

            public void onDrawerClosed() {
                // TODO Auto-generated method stub
                drawer.setBackgroundColor(Color.BLACK);
            }
        });

        drawer.setOnDrawerOpenListener(new OnDrawerOpenListener() {

            public void onDrawerOpened() {
                // TODO Auto-generated method stub
                drawer.setBackgroundColor(Color.BLUE);
            }
        });

        View content = drawer.getContent();
        content.setClickable(true);
        content.setTouchDelegate(drawer.getHandle().getTouchDelegate());
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我可以隐藏handleby设置width=0dip,但无法知道如何在关闭时显示20%的内容SlidingDrawer并将操作设置ContentSlidingDrawer.

我尝试获取touchDelegate句柄并将其设置为Content,但它不起作用.请帮我解决这个问题.

Fly*_*n81 0

我认为当前的 SlidingDrawer 不可能实现这一点,除非您正在处理可以切割并分成 20% 的东西。如果您查看 SlidingDrawer 的源代码,open()您会发现它调用了一个私有方法openDrawer(). 这是它的作用:

private void openDrawer() {
    moveHandle(EXPANDED_FULL_OPEN);
    mContent.setVisibility(View.VISIBLE);

    if (mExpanded) {
        return;
    }

    mExpanded = true;

    if (mOnDrawerOpenListener != null) {
        mOnDrawerOpenListener.onDrawerOpened();
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,在手柄开始移动之前,内容(“抽屉”)是不可见的。抽屉移动时似乎没有钩子,只有在抽屉开始或结束时才钩子,因此您无法动态更新手柄或抽屉中的内容。

如果您正在处理图像,您可以将其切成两部分:20% 和 80%。但由于您正在使用 3 个 TextView,因此看起来这不是一个选项。

鉴于我认为一个选择是采用 SlidingDrawer 的源代码并创建您自己的类。这样您就可以完全控制绘图的处理方式,但仍然能够重用所有侦听器。这是来源的链接: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/widget/SlidingDrawer.java