Skip to content

Latest commit

 

History

History
158 lines (122 loc) · 4.7 KB

README_ZH.md

File metadata and controls

158 lines (122 loc) · 4.7 KB

ParallaxBackLayout

Download

仿微信的滑动返回Activity(视差滑动).

Watch the video

Demo Apk

DOWNLOAD

使用说明

首先添加引用到Model的build.gradle

compile 'com.github.anzewei:parallaxbacklayout:lastversion'

在application中注册ParallaxHelper

registerActivityLifecycleCallbacks(ParallaxHelper.getInstance());

对需要滑动的activity增加annotation

@ParallaxBack
public class DetailActivity extends AppCompatActivity {
  // 
}
  • 这样DetailActivity就可以滑动返回了

高级用法

annotation高级配置

@ParallaxBack(edge = ParallaxBack.Edge.RIGHT,layout = ParallaxBack.Layout.PARALLAX)

注意:其中edge控制滑动方向,layout设置滑动效果

滑动效果默认有3种方式

  • PARALLAX 视差返回,类似微信的滑动返回效果
  • COVER 上级activity不会滑动,只滑动当前activity,有点像抽屉
  • SLIDE 跟随滑动,上一级会紧贴着当前activity滑动

自定义滑动效果

  • 首先实现滑动效果
public class MyTransform implements ITransform {
    @Override
    public void transform(Canvas canvas, ParallaxBackLayout parallaxBackLayout, View child) {
        //这里对canvas做变换就可以了,可以看一下 CoverTransform ParallaxTransform SlideTransform
    }
}
  • 设置自定义效果
ParallaxBackLayout layout = ParallaxHelper.getParallaxBackLayout(activity, true);
layout.setLayoutType(LAYOUT_CUSTOM,new MyTransform());

全屏滑动和边缘滑动

ParallaxBackLayout layout = ParallaxHelper.getParallaxBackLayout(activity, true);
layout.setEdgeMode(EDGE_MODE_FULL);//全屏滑动
layout.setEdgeMode(EDGE_MODE_DEFAULT);//边缘滑动

禁用返回

如果需要对DetailActivity进行滑动返回的控制,如某些情况不希望滑动,那可以使用以下代码

@ParallaxBack
public class DetailActivity extends AppCompatActivity {
     private void disableBack(){
         ParallaxHelper.getInstance().disableParallaxBack(this);
     }
}

更多api

  • setShadowDrawable
    设置阴影
  • setEdgeFlag
    设置滑动方向
  • setLayoutType
    设置切换方式
  • setSlideCallback
    设置滑动回调
  • setScrollThresHold
    滑动比例超过设置值以后会finish当前activity
  • setBackgroundView
    设置上级view的绘制方式,可继承自GoBackView,在draw方法中做特殊处理

常见问题

  • 华为手机返回时闪屏
      请使用1.1.9以后版本
  • 使用fresco,滑动返回时看不到图片
     这个问题是因为Imageview的onVisibilityAggregated会调用drawable的setVisible,而fresco的RootDrawable在绘制时会判断visible,  为false时不绘制,具体可见com.facebook.drawee.generic.RootDrawable-draw(Canvas);  解决方法是继承SimpleDraweeView重写onVisibilityAggregated
   @Override
    public void onVisibilityAggregated(boolean isVisible) {
        super.onVisibilityAggregated(isVisible);
        if (getDrawable() != null) {
            getDrawable().setVisible(true, false);
        }
    }

版本建议

如果不能获取到application,或者希望兼容4.0以下的版本,建议使用

compile 'com.github.anzewei:parallaxbacklayout:0.5'

混淆保护

-keep public enum com.github.anzewei.parallaxbacklayout.ParallaxBack$** {
    **[] $VALUES;
    public *;
}

更新

  • 日期 2017.06.19 版本 1.1.6 更新了annotation
  • 日期 2017.06.19 版本 1.1.2 提供更多接口 新增自定义切换样式 新增自定义阴影
  • 日期 2017.06.17 版本 1.1.1 新增多种滑动方向,上下左右都支持; 新增切换样式,视差 、覆盖 、无视差
  • 日期 2017.05.16 版本 1.0 使用更简单的方法实现,不需要继承基类

License

Copyright 2017 anzewei

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.