-
Notifications
You must be signed in to change notification settings - Fork 192
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
cc82cf0
commit c09bd2b
Showing
37 changed files
with
1,247 additions
and
204 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
/build |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
apply plugin: 'com.android.library' | ||
|
||
android { | ||
compileSdkVersion rootProject.ext.compileSdkVersion | ||
buildToolsVersion rootProject.ext.buildToolsVersion | ||
defaultConfig { | ||
minSdkVersion rootProject.ext.minSdkVersion | ||
targetSdkVersion rootProject.ext.targetSdkVersion | ||
versionCode 1 | ||
versionName "1.0" | ||
|
||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" | ||
|
||
} | ||
buildTypes { | ||
release { | ||
minifyEnabled false | ||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' | ||
} | ||
} | ||
} | ||
|
||
dependencies { | ||
compile fileTree(dir: 'libs', include: ['*.jar']) | ||
provided "com.android.support:appcompat-v7:$rootProject.ext.supportLibraryVersion" | ||
// provided 'com.android.support:design:24.2.1' | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
# Add project specific ProGuard rules here. | ||
# By default, the flags in this file are appended to flags specified | ||
# in D:\AndroidSdk/tools/proguard/proguard-android.txt | ||
# You can edit the include path and order by changing the proguardFiles | ||
# directive in build.gradle. | ||
# | ||
# For more details, see | ||
# http://developer.android.com/guide/developing/tools/proguard.html | ||
|
||
# Add any project specific keep options here: | ||
|
||
# If your project uses WebView with JS, uncomment the following | ||
# and specify the fully qualified class name to the JavaScript interface | ||
# class: | ||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { | ||
# public *; | ||
#} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
<manifest package="com.oubowu.slideback" | ||
xmlns:android="http://schemas.android.com/apk/res/android"> | ||
|
||
<application android:allowBackup="true" | ||
android:label="@string/app_name" | ||
android:supportsRtl="true" | ||
> | ||
|
||
</application> | ||
|
||
</manifest> |
101 changes: 101 additions & 0 deletions
101
SlideBack/src/main/java/com/oubowu/slideback/ActivityHelper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
package com.oubowu.slideback; | ||
|
||
import android.app.Activity; | ||
import android.app.Application; | ||
import android.os.Bundle; | ||
import android.util.Log; | ||
|
||
import java.util.Stack; | ||
|
||
/** | ||
* Created by Oubowu on 2016/9/20 3:28. | ||
*/ | ||
public class ActivityHelper implements Application.ActivityLifecycleCallbacks { | ||
|
||
private static Stack<Activity> mActivityStack; | ||
|
||
public ActivityHelper() { | ||
} | ||
|
||
@Override | ||
public void onActivityCreated(Activity activity, Bundle bundle) { | ||
if (mActivityStack == null) { | ||
mActivityStack = new Stack<>(); | ||
} | ||
mActivityStack.add(activity); | ||
} | ||
|
||
@Override | ||
public void onActivityStarted(Activity activity) { | ||
|
||
} | ||
|
||
@Override | ||
public void onActivityResumed(Activity activity) { | ||
|
||
} | ||
|
||
@Override | ||
public void onActivityPaused(Activity activity) { | ||
|
||
} | ||
|
||
@Override | ||
public void onActivityStopped(Activity activity) { | ||
|
||
} | ||
|
||
@Override | ||
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) { | ||
|
||
} | ||
|
||
@Override | ||
public void onActivityDestroyed(Activity activity) { | ||
|
||
// Log.e("TAG", "ActivityHelper-销毁: " + activity); | ||
mActivityStack.remove(activity); | ||
|
||
} | ||
|
||
public Activity getPreActivity() { | ||
if (mActivityStack == null) { | ||
return null; | ||
} | ||
int size = mActivityStack.size(); | ||
if (size < 2) { | ||
return null; | ||
} | ||
return mActivityStack.elementAt(size - 2); | ||
} | ||
|
||
public void finishAllActivity() { | ||
if (mActivityStack == null) { | ||
return; | ||
} | ||
for (Activity activity : mActivityStack) { | ||
activity.finish(); | ||
} | ||
} | ||
|
||
public void printAllActivity() { | ||
if (mActivityStack == null) { | ||
return; | ||
} | ||
for (int i = 0; i < mActivityStack.size(); i++) { | ||
Log.e("TAG", "位置" + i + ": " + mActivityStack.get(i)); | ||
} | ||
} | ||
|
||
/** | ||
* 强制删掉activity,用于用户快速滑动页面的时候,因为页面还没来得及destroy导致的问题 | ||
* | ||
* @param activity 删掉的activity | ||
*/ | ||
void postRemoveActivity(Activity activity) { | ||
if (mActivityStack != null) { | ||
mActivityStack.remove(activity); | ||
} | ||
} | ||
|
||
} |
140 changes: 140 additions & 0 deletions
140
SlideBack/src/main/java/com/oubowu/slideback/SlideBackHelper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,140 @@ | ||
package com.oubowu.slideback; | ||
|
||
import android.app.Activity; | ||
import android.graphics.drawable.Drawable; | ||
import android.support.annotation.NonNull; | ||
import android.support.annotation.Nullable; | ||
import android.view.View; | ||
import android.view.ViewGroup; | ||
|
||
import com.oubowu.slideback.callbak.OnInternalStateListener; | ||
import com.oubowu.slideback.callbak.OnSlideListener; | ||
import com.oubowu.slideback.widget.SlideBackLayout; | ||
|
||
/** | ||
* Created by Oubowu on 2016/9/22 0022 14:31. | ||
*/ | ||
// TODO: 2016/9/24 添加了上个页面的布局,如果页面有Toolbar的话其不随屏幕选择而大小变化,永远维持进入时的宽高比 | ||
public class SlideBackHelper { | ||
|
||
public static ViewGroup getDecorView(Activity activity) { | ||
return (ViewGroup) activity.getWindow().getDecorView(); | ||
} | ||
|
||
public static Drawable getDecorViewDrawable(Activity activity) { | ||
return getDecorView(activity).getBackground(); | ||
} | ||
|
||
public static View getContentView(Activity activity) { | ||
return getDecorView(activity).getChildAt(0); | ||
} | ||
|
||
/** | ||
* 附着Activity,实现侧滑 | ||
* | ||
* @param curActivity 当前Activity | ||
* @param helper Activity栈管理类 | ||
* @param config 参数配置 | ||
* @param listener 滑动的监听 | ||
* @return 处理侧滑的布局,提高方法动态设置滑动相关参数 | ||
*/ | ||
public static SlideBackLayout attach(@NonNull final Activity curActivity, @NonNull final ActivityHelper helper, @Nullable final SlideConfig config, @Nullable final OnSlideListener listener) { | ||
|
||
final ViewGroup decorView = getDecorView(curActivity); | ||
final View contentView = decorView.getChildAt(0); | ||
decorView.removeViewAt(0); | ||
|
||
View content = contentView.findViewById(android.R.id.content); | ||
if (content.getBackground() == null) { | ||
content.setBackground(decorView.getBackground()); | ||
} | ||
|
||
final Activity[] preActivity = {helper.getPreActivity()}; | ||
final View[] preContentView = {getContentView(preActivity[0])}; | ||
Drawable preDecorViewDrawable = getDecorViewDrawable(preActivity[0]); | ||
content = preContentView[0].findViewById(android.R.id.content); | ||
if (content.getBackground() == null) { | ||
content.setBackground(preDecorViewDrawable); | ||
} | ||
|
||
final SlideBackLayout slideBackLayout; | ||
slideBackLayout = new SlideBackLayout(curActivity, contentView, preContentView[0], preDecorViewDrawable, config, new OnInternalStateListener() { | ||
|
||
@Override | ||
public void onSlide(float percent) { | ||
if (listener != null) { | ||
listener.onSlide(percent); | ||
} | ||
} | ||
|
||
@Override | ||
public void onOpen() { | ||
if (listener != null) { | ||
listener.onOpen(); | ||
} | ||
} | ||
|
||
@Override | ||
public void onClose(Boolean finishActivity) { | ||
|
||
// finishActivity为true时关闭页面,为false时不关闭页面,为null时为其他地方关闭页面时调用SlideBackLayout.isComingToFinish的回调 | ||
|
||
if (listener != null) { | ||
listener.onClose(); | ||
} | ||
|
||
if ((finishActivity == null || !finishActivity) && listener != null) { | ||
listener.onClose(); | ||
} | ||
|
||
if (config != null && config.isRotateScreen()) { | ||
|
||
if (finishActivity != null && finishActivity) { | ||
// remove了preContentView后布局会重新调整,这时候contentView回到原处,所以要设不可见 | ||
contentView.setVisibility(View.INVISIBLE); | ||
} | ||
|
||
if (preActivity[0] != null && preContentView[0].getParent() != getDecorView(preActivity[0])) { | ||
// Log.e("TAG", ((SlideBackLayout) preContentView[0].getParent()).getTestName() + "这里把欠人的布局放回到上个Activity"); | ||
preContentView[0].setX(0); | ||
((ViewGroup) preContentView[0].getParent()).removeView(preContentView[0]); | ||
getDecorView(preActivity[0]).addView(preContentView[0], 0); | ||
} | ||
//else { | ||
// Log.e("TAG", "这个页面你都没加过,还是在上一个那里,你没欠我"); | ||
//} | ||
} | ||
|
||
if (finishActivity != null && finishActivity) { | ||
curActivity.finish(); | ||
curActivity.overridePendingTransition(0, R.anim.anim_out_none); | ||
helper.postRemoveActivity(curActivity); | ||
} else if (finishActivity == null) { | ||
helper.postRemoveActivity(curActivity); | ||
} | ||
} | ||
|
||
@Override | ||
public void onCheckPreActivity(SlideBackLayout slideBackLayout) { | ||
// Log.e("TAG", "--------------------------------------------------"); | ||
// helper.printAllActivity(); | ||
// Log.e("TAG", "--------------------------------------------------"); | ||
Activity activity = helper.getPreActivity(); | ||
// Log.e("TAG", "SlideBackHelper-120行-onFocus(): " + preActivity[0] + ";" + activity); | ||
if (activity != preActivity[0]) { | ||
// Log.e("TAG", "SlideBackHelper-122行-onFocus(): 上个Activity变了"); | ||
preActivity[0] = activity; | ||
preContentView[0] = getContentView(preActivity[0]); | ||
slideBackLayout.updatePreContentView(preContentView[0]); | ||
} | ||
} | ||
|
||
}); | ||
|
||
decorView.addView(slideBackLayout); | ||
|
||
return slideBackLayout; | ||
} | ||
|
||
|
||
} |
Oops, something went wrong.