2014-02-15 118 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