2014-08-27 376 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