您的位置:首页 > 移动开发 > Android开发

[置顶] Android 快速实现右滑退出效果

2017-08-16 11:57 204 查看

快速实现右滑退出

本人使用的是GitHub上的开源库 SwipeBack

开源库地址 https://github.com/ikew0ng/SwipeBackLayout

集成右滑退出效果首先需要将库引用到我们的项目中,这里通过gradle的方式导入

compile ‘me.imid.swipebacklayout.lib:library:1.0.0’

引入项目之后,只需一步就可以简单的使用了,只要将我们需要右滑退出的Activity继承自库中的

SwipeBackActivity,就已经有右滑退出的效果了,如下图



但是我们发现滑动后出现黑屏,这个时候我们只要在Style里面设置一个属性就能够解决这个问题

<!-- 首页(第一级页面不让Activity透明) -->
<style name="mainPageStyle" parent="AppTheme">
<item name="android:windowIsTranslucent">false</item>
</style>


将这个Style在AndroidManifest里设置到需要使用右滑退出的Activity中

<activity
android:name=".ui.activity.FileSelectActivity"
android:label="@string/title_activity_fire_select"
android:theme="@style/otherPageStyle">


这样我们就解决了黑屏的问题。在实际开发中,我们还会经常会用到基类,例如BaseActivity之类的,这个时候我们还想使用右滑效果,就需要在库中找到SwipeBackActvity,将类中的全部代码Copy出

public class SwipeBackActivity extends FragmentActivity implements SwipeBackActivityBase {
private SwipeBackActivityHelper mHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHelper = new SwipeBackActivityHelper(this);
mHelper.onActivityCreate();
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mHelper.onPostCreate();
}

@Override
public View findViewById(int id) {
View v = super.findViewById(id);
if (v == null && mHelper != null)
return mHelper.findViewById(id);
return v;
}

@Override
public SwipeBackLayout getSwipeBackLayout() {
return mHelper.getSwipeBackLayout();
}

@Override
public void setSwipeBackEnable(boolean enable) {
getSwipeBackLayout().setEnableGesture(enable);
}

@Override
public void scrollToFinishActivity() {
Utils.convertActivityToTranslucent(this);
getSwipeBackLayout().scrollToFinishActivity();
}
}


上面就是SwipeBackActivity 的源码,我们将源码Copy到一个新类中,并且将其继承自己项目的BaseActivity即可,这样我们只要将需要效果的Ativity 继承自BaseSwipeBackActivity就能完美的使用了。

public abstract class BaseSwipeBackActivity extends BaseActivity implements SwipeBackActivityBase {
private SwipeBackActivityHelper mHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHelper = new SwipeBackActivityHelper(this);
mHelper.onActivityCreate();
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mHelper.onPostCreate();
}

@Override
public View findViewById(int id) {
View v = super.findViewById(id);
if (v == null && mHelper != null)
return mHelper.findViewById(id);
return v;
}

@Override
public SwipeBackLayout getSwipeBackLayout() {
return mHelper.getSwipeBackLayout();
}

@Override
public void setSwipeBackEnable(boolean enable) {
getSwipeBackLayout().setEnableGesture(enable);
}

@Override
public void scrollToFinishActivity() {
Utils.convertActivityToTranslucent(this);
getSwipeBackLayout().scrollToFinishActivity();
}
}


这里还隐藏了一个坑,那就是 style 中的 android:windowIsTranslucent 属性不兼容activity切换动画问题,这里博主提供一个链接,希望能够帮助大家

http://blog.csdn.net/fancylovejava/article/details/39643449
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: