DrawerLayout 的扩展,具有动画效果

[复制链接]
来自: MrlLee 分类: Android精品源码 上传时间: 2016-9-8 15:33:57
Tag:动画

项目介绍:

使用说明:添加依赖
[XML] 查看源文件 复制代码
compile 'com.github.mzule.fantasyslide:library:1.0.3'

调用
调用方法基本与 DrawerLayout 一致. 本项目支持左右 (start left end right) 侧边栏同时定义。
[XML] 查看源文件 复制代码

 
    
 
    
 
        
 
    
    
进阶maxTranslationX
通过设置 maxTranslationX 可以设置菜单项动画的最大位移。仅有在采用默认 Transformer 时才有效。
[XML] 查看源文件 复制代码
一般情况下,左边的侧边栏 maxTranslationX 为正数,右边的侧边栏 maxTranslationX 为负数。
Listener
支持设置 Listener 来监听侧边栏菜单的状态。
[Java] 查看源文件 复制代码
SideBar leftSideBar = (SideBar) findViewById(R.id.leftSideBar);
leftSideBar.setFantasyListener(new SimpleFantasyListener() {
    @Override
    public boolean onHover(@Nullable View view) {
        return false;
    }
 
    @Override
    public boolean onSelect(View view) {
        return false;
    }
 
    @Override
    public void onCancel() {
    }
});
  • Hover 是指上面效果图中,高亮的状态,此时手指仍在屏幕上 move. 默认的 hover 处理逻辑是设置 view 的 pressed 状态为 true. 重写 onHover(View) 方法返回 true 可以改写默认逻辑。
  • Select 是指 hover 状态时手指离开屏幕,触发 select 状态。默认的处理逻辑是调用 view 的 onClick 事件。重写 onSelect(View) 方法返回 true 可以改写默认逻辑。
  • Cancel 是指手指离开屏幕时,没有任何 view 触发 select 状态,则为 cancel,无默认处理逻辑。

Transformer
项目设计了一个 Transformer 接口,供调用者自定义菜单项的动画效果。使用方法类似于 ViewPager 的 PageTransformer.
[Java] 查看源文件 复制代码
class DefaultTransformer implements Transformer {
    private float maxTranslationX;
 
    DefaultTransformer(float maxTranslationX) {
        this.maxTranslationX = maxTranslationX;
    }
 
    @Override
    public void apply(ViewGroup sideBar, View itemView, float touchY, float slideOffset, boolean isLeft) {
        float translationX;
        int centerY = itemView.getTop() + itemView.getHeight() / 2;
        float distance = Math.abs(touchY - centerY);
        float scale = distance / sideBar.getHeight() * 3; // 距离中心点距离与 sideBar 的 1/3 对比
        if (isLeft) {
            translationX = Math.max(0, maxTranslationX - scale * maxTranslationX);
        } else {
            translationX = Math.min(0, maxTranslationX - scale * maxTranslationX);
        }
        itemView.setTranslationX(translationX * slideOffset);
    }
}



相关源码推荐:

我来说两句
所有评论(242)
流年未尽心已凉 2016-9-13 14:53:54
感谢分享,安卓巴士有你更精彩:)
回复
ok1010101 2016-9-13 15:27:12
强烈支持楼主ing……
回复
季首阳光 2016-9-13 19:18:03
学习学习!
回复
1377482711 2016-9-13 20:53:26
正需要啊,感谢楼主无私分享!
回复
敞篷车 2016-9-14 09:39:18
楼主威武啊,安卓巴士有你更给力!
回复
as26220635 2016-9-14 13:59:03
强烈支持楼主ing……
回复
友情岁月 2016-9-15 13:56:48
精华内容,楼主V5!
回复
wangyongchao74 2016-9-15 14:09:36
学习了!!十分感谢!
回复
提取码:  下载次数:173 状态:已购或VIP 售价:10(原价:10)金钱 下载权限:初级码农 
12211 6 173
代码贡献英雄榜
用户名 下载数
联系我们
首页/微信公众账号投稿
帖子代码编辑/版权问题
QQ:435399051,1294855032
如何获得代码达人称号?
如何成为签约作者?
领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )