java – 打开导航栏时如何使背景活动较小?
发布时间:2020-09-19 13:34:34  所属栏目:Java  来源:互联网 
            导读:我想让我的背景活动稍微打开导航抽屉,模拟在Airbnb应用程序中存在的影响.我想最好的解释是屏幕截图: 但是要点不是使View更小,而是使其成为与Drawer Open / Close动画同步的动画.所以如果你开始打开抽屉,中间决定停下来,背景活动量表会受到相应的影响. 如何使
                
                
                
            | 
                         我想让我的背景活动稍微打开导航抽屉,模拟在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足够小)或者可能根据抽屉的开放%尝试新的效果(更改颜色). 希望它有帮助. (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
推荐文章
            站长推荐
            - Java:如果不知道如何初始化数组大小?
 - java 查询oracle数据库所有表DatabaseMetaData的
 - 包装的Java应用程序在Windows XP兼容模式下运行速
 - java – 如何在Spring Boot项目中禁用Hibernate验
 - java – 区分String args []和String [] args
 - java – Outputstream是一个抽象类,所以我们不能
 - java – 如何调用超级(…)和这(…)在重载构造函数
 - java – CopyOnWriteArrayList throwing Current
 - java – 枚举和枚举之间的区别
 - 面向对象和面向过程的区别(动力节点java学院整理
 
热点阅读
            