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)
ILI 2016-9-8 15:39:10
学习...学习...
回复
w00214777 2016-9-8 15:46:11
学习...学习...
回复
嘘丶~低调 2016-9-8 15:54:35
楼主威武啊,安卓巴士有你更给力!
回复
ffg12 2016-9-8 15:55:53
mark,收藏了
回复
changyounet 2016-9-8 16:08:14
好好 学习了 确实不错
回复
tylz 2016-9-8 16:20:44
不错不错,楼主辛苦了。。。
回复
飞浔 2016-9-8 16:25:11
强烈支持楼主ing……
回复
领先的中文移动亚博电竞和亚博体育8者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

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