我想让我的背景活动稍微打开导航抽屉,模拟在Airbnb应用程序中存在的影响.我想最好的解释是屏幕截图:
但是要点不是使View更小,而是使其成为与Drawer Open / Close动画同步的动画.所以如果你开始打开抽屉,中间决定停下来,背景活动量表会受到相应的影响.
如何使用DrawerLayout中的构建?是否有一些实施?
提前致谢.
解决方法
您可以使用支持库v4中的
ActionBarDrawerToggle 执行此效果.
所有你需要做的是覆盖onDrawerSlide方法来检索抽屉菜单的打开%,然后缩放您的片段放置在您的FrameLayout.
代码示例:
main_layout.xml
<?xml version="1.0" encoding="utf-8"?> <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"/> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp"/> </android.support.v4.widget.DrawerLayout>
现在在你的活动中拿着抽屉:
public class ConfigurerActivity extends ActionBarActivity { private DrawerLayout mDrawerLayout; private ListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; private FrameLayout frame; private float lastScale = 1.0f; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ListView) findViewById(R.id.left_drawer); frame = (FrameLayout) findViewById(R.id.content_frame); mDrawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout,R.drawable.ic_drawer,R.string.acc_drawer_open,R.string.acc_drawer_close) { @SuppressLint("NewApi") public void onDrawerSlide(View drawerView,float slideOffset) { float min = 0.9f; float max = 1.0f; float scaleFactor = (max - ((max - min) * slideOffset)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { frame.setScaleX(scaleFactor); frame.setScaleY(scaleFactor); } else { ScaleAnimation anim = new ScaleAnimation(lastScale,scaleFactor,lastScale,frame.getWidth()/2,frame.getHeight()/2); anim.setDuration(0); anim.setFillAfter(true); frame.startAnimation(anim); lastScale = scaleFactor; } } }; mDrawerLayout.setDrawerListener(mDrawerToggle); // ... more of your code } }
请注意,我使用2种不同的方法进行缩放,因为setScaleX / Y在PRE – Honeycomb Android版本中不可用.
这样,您可以设置自己的scaleFactor(我认为0.9f足够小)或者可能根据抽屉的开放%尝试新的效果(更改颜色).
希望它有帮助.