【问题标题】:Gradually set transparency of nav drawer as it opens导航抽屉打开时逐渐设置透明度
【发布时间】:2014-03-14 19:30:51
【问题描述】:

我想将导航抽屉设置为完全透明,并且随着用户滑动打开导航抽屉,它逐渐(跟随用户手指)变得不透明。我怎样才能做到这一点?

这是 XML 布局:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <RelativeLayout
        android:id="@+id/RLayout02"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="#EDEDED" >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#EDEDED"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin"
            android:scrollY="0dp" >

            <TextView
                android:id="@+id/welcomeHeader"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="0dp"
                android:background="@drawable/bg_card_blue"
                android:gravity="center_horizontal|center_vertical"
                android:text="@string/welcomeHeader"
                android:textColor="#07BDEC"
                android:textSize="20sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/swipeOver"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/welcomeInfo"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="16dp"
                android:background="@drawable/bg_card_red"
                android:gravity="center_horizontal|center_vertical"
                android:onClick="move"
                android:text="@string/swipe"
                android:textColor="#EC135A"
                android:textSize="18sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/welcomeInfo"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/swipeOver"
                android:layout_below="@+id/welcomeHeader"
                android:layout_marginTop="16dp"
                android:background="@drawable/my_button"
                android:gravity="center_horizontal|center_vertical"
                android:lineSpacingExtra="2sp"
                android:text="@string/welcomeInfo"
                android:textSize="14sp" />
        </RelativeLayout>
    </RelativeLayout>

    <ImageView
        android:id="@+id/imgMin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|bottom"
        android:paddingBottom="10dp"
        android:paddingLeft="70dp"
        android:paddingRight="70dp"
        android:src="@drawable/mp_black"
        android:visibility="invisible" />
</FrameLayout>

<ListView
    android:id="@+id/left_drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="@android:color/white"
    android:choiceMode="singleChoice"
    android:divider="#DDDDDD"
    android:dividerHeight="0.5dp" />

【问题讨论】:

  • 给我看看你已经建立抽屉的脚本。我不知道你现在有什么

标签: android transparency opacity transparent navigation-drawer


【解决方案1】:

您可能已经实现了DrawerLayout.DrawerListener(您应该使用onDrawerOpenedonDrawerClosed)我不确定,但您可以尝试在滑动抽屉时调用的onDrawerSlide。 从而给出了参数“offset”。我相信这是新的偏移量(你的滑动距离) 这给出了一个介于 0 和 1 之间的值。 在这种方法中,您可以尝试更改抽屉的 alpha。

试试这个:

 ActionbarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {
@Override
onDrawerOpened(){};
@Override
onDrawerClosed(){};

编辑:

@Override
onDrawerSlide(View drawerview, float slideoffset){
drawerview.setAlpha((1/255)*slideoffset);
}

尝试为抽屉视图设置 alpha。它也不应该为子视图设置 alpha。

这只是一个草稿,所以我不确定它是否完美工作(尤其是对于 alpha 公式),但您应该朝这个方向看,只需尝试一下。

阴影编辑:

@Override
onDrawerSlide(View drawerview, float slideoffset){
drawerview.setAlpha((1/255)*slideoffset);
shadowDrawable.setAlpha((1/255)*slideoffset);
mDrawerLayout.setDrawerShadow(shadowDrawable);

}

【讨论】:

  • 我已经制定了一个可能的解决方案,但是 DrawerLayout.onInterceptTouchEvent 让我崩溃了,知道如何覆盖它或至少阻止它被调用吗?我将 DrawerLayout 设置为子视图而不是父视图,这就是它崩溃的原因。
  • 您可能应该将其保留为父项,因为您选择的抽屉项目的内容将放置在抽屉创建的框架内,因此 DrawerLayout.onInterceptTouchEvent 可以拦截触摸以检查它是否是触摸对于抽屉或子视图..那么崩溃可能会消失..但是为什么您将 DrawerLayout 作为子视图?
  • 我只是将它作为子视图,因为如果我想设置 DrawerLayout 的透明度,它还会设置其所有子视图的透明度。我的简单(也不是最聪明的)解决方案是使其成为子视图。有什么更好的解决方法的想法吗?
  • 放回作为父视图并设置背景的透明度。不是为了整个视图。也许这是一个解决方案.. 或者您可以编辑您的帖子并添加一些脚本吗?\
  • 我已经用 XML 布局更新了我的问题(以 DrawerLayout 作为父级)
猜你喜欢
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多