仿微信的側滑退出Activity
阿新 • • 發佈:2019-02-19
用蘋果的小夥伴們都會知道,ios系統退出當前的頁面只需要向右邊側滑,這是一個非常好的使用者體驗,但是Android官方並沒有出具有這有性質的Activity,所以我們只能辛苦辛苦,自己動手寫一個具有這種性質的Activity。
其實寫這個自定義的Activity還是非常簡單的。我們主要用到一個這個控制元件SlidingPaneLayout,使用這個控制元件來模擬我們的這種效果的好處是我們基本不用去管一些手勢事件衝突問題,SlidingPaneLayout已經幫我們做好了;
public abstract class BaseActivity extends AppCompatActivity implements SlidingPaneLayout.PanelSlideListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
initSwipeBackFinish();
super.onCreate(savedInstanceState);
}
/**
* 初始化滑動返回
*/
private void initSwipeBackFinish() {
if (isSupportSwipeBack()) {
SlidingPaneLayout slidingPaneLayout = new SlidingPaneLayout(this);
//通過反射改變mOverhangSize的值為0,這個mOverhangSize值為選單到右邊螢幕的最短距離,
//預設是32dp
try {
//更改屬性
Field field = SlidingPaneLayout.class.getDeclaredField("mOverhangSize");
field.setAccessible(true);
field.set(slidingPaneLayout, 0 );
} catch (Exception e) {
e.printStackTrace();
}
//設定監聽事件
slidingPaneLayout.setPanelSlideListener(this);
slidingPaneLayout.setSliderFadeColor(getResources().getColor(android.R.color.transparent));
View leftView = new View(this);
leftView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
//在左邊新增這個檢視
slidingPaneLayout.addView(leftView, 0);
//獲取到最頂層的檢視容器
ViewGroup decor = (ViewGroup) getWindow().getDecorView();
//獲取到左邊的檢視
ViewGroup decorChild = (ViewGroup) decor.getChildAt(0);
//設定左邊的檢視為透明 decorChild.setBackgroundColor(getResources().getColor(android.R.color.transparent));
decor.removeView(decorChild);
decor.addView(slidingPaneLayout);
//在右邊新增這個檢視
slidingPaneLayout.addView(decorChild, 1);
}
}
/**
* 是否支援滑動退出
*/
protected boolean isSupportSwipeBack() {
return true;
}
@Override
public void onPanelClosed(View view) {
}
@Override
public void onPanelOpened(View view) {
finish();
//設定Activity退出的動畫
this.overridePendingTransition(0, R.anim.slide_out_right);
}
@Override
public void onPanelSlide(View view, float v) {
}
}