2014-02-15 152 views
0

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

下面是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" /> 

+0

告诉我你到哪儿去建立你已经抽屉脚本..我不知道你有什么权利现在 – Crimson

回答

0

你可能已经实现了DrawerLayout.DrawerListener(你应该使用onDrawerOpenedonDrawerClosed)我不知道,但你可以尝试onDrawerSlide这是当你滑动抽屉时调用。由此给出参数“偏移”。我相信这是新的偏移量(您的滑块移动的距离) 这给出了介于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); 
} 

尝试设置透明度为drawerview。它不应该为子视图设置alpha。

这只是一个快速的草稿,所以我不确定它是否完美的工作(特别是对于alpha公式),但你应该看看这个方向只是尝试一下这个。

SHADOW编辑:

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

} 
+0

我已经制定了一个可行的解决方案,但DrawerLayout.onInterceptTouchEvent给我一个崩溃,想知道如何覆盖它或者至少阻止它被调用?我将DrawerLayout作为childview而不是父级,这就是为什么它会崩溃。 – user2993966

+0

您可能应该将其保留为父级,因为您选择的抽屉项目的内容将被放置在由抽屉创建的框架内,因此DrawerLayout.onInterceptTouchEvent可以拦截触摸来检查它是否为抽屉或子视图..然后可能崩溃将会消失..但是为什么你将DrawerLayout作为一个childview? – Crimson

+0

我只是把它作为一个子视图,因为如果我想设置DrawerLayout的透明度,它还会设置其所有子视图的透明度。我的简单(也不是最聪明的)解决方案是使其成为子视图。任何更好的方法来解决这个想法? – user2993966