2014-08-27 237 views
0

我想讓導航抽屜移動整個屏幕(整個高度,而不是寬度)。我沒有使用ActionBar和其他庫,只是默認的Android抽屜。任何人有任何例子?導航抽屜移動整個屏幕

+0

你的意思是有或無的動作條。我們有什麼區別需要做到這一點。 – Simon 2014-08-27 19:44:55

+0

好吧,我說過我沒有使用ActionBar,所以沒有ActionBar – File 2014-08-27 19:46:51

+0

對不起。我的錯。回答途中。 – Simon 2014-08-27 19:50:16

回答

1

您需要做的是將內容視圖的translationX屬性設置爲抽屜移至的像素量。

在你執行http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.DrawerListener.html你應該實現onDrawerSlide(View drawerView, float slideOffset)

在這種方法中,你應該添加這一行。 mDrawerLayout.findViewById(R.id.your_content_id).setTranslationX(drawerView.getWidth() * slideOffset);

這應該做的伎倆。

+0

謝謝,它的工作原理!但有沒有什麼辦法可以在API 11下工作? – File 2014-08-28 17:42:22

+0

你可以嘗試'mDrawerLayout.findViewById(R.id.your_content_id).offsetLeftAndRight((INT)(drawerView.getWidth()* slideOffset));' – Simon 2014-08-29 03:27:07

1

器具DrawerListener(作爲傳遞參數佈局的R.id):

import android.animation.ObjectAnimator; 
import android.support.v4.widget.DrawerLayout.DrawerListener; 
import android.view.View; 

public class DrawerLayoutListener implements DrawerListener { 

private View _contentDrawer; 
private int _idView; 

public DrawerLayoutListener(int idView) { 
    _idView = idView; 
} 

@Override 
public void onDrawerClosed(View arg0) {} 

@Override 
public void onDrawerOpened(View arg0) {} 

@Override 
public void onDrawerSlide(View drawerView, float slideOffset) { 
    if (_contentDrawer == null) _contentDrawer = ((View) drawerView.getParent()).findViewById(_idView); 
    float moveFactor = (drawerView.getWidth() * slideOffset); 
    ObjectAnimator.ofFloat(_contentDrawer, "translationX", moveFactor).setDuration(0).start(); 
} 

@Override 
public void onDrawerStateChanged(int arg0) {} 

} 

並將其設置爲監聽到你的DrawerLayout

drawer_layout.setDrawerListener(new DrawerLayoutListener(R.id.content_frame)); 
+0

謝謝,但西蒙早些時候回答了這個問題。有什麼辦法可以在API 11下工作嗎? – File 2014-08-28 17:43:19

+1

是的!這個偉大的[庫](http://nineoldandroids.com)具有相同的API,只需要更改導入,並且它支持自api 1。 – 2014-08-28 19:35:03