Bläddra i källkod

[공통][New] ActionBar 에 AppBarLayout scroll listener 추가

hyodong.min 7 år sedan
förälder
incheckning
5cf2a08735

+ 2 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/MainActivity.java

@@ -77,6 +77,8 @@ public class MainActivity extends AppCompatActivity {
   protected void onDestroy() {
     Log.w("APP# MainActivity | onDestroy", "| <<<<<<<<<<<<< " + this.getClass().getSimpleName());
 
+    ActionBarManager.getInstance().dispose();
+
     super.onDestroy();
   }
 

+ 43 - 17
app/src/main/java/kr/co/zumo/app/lifeplus/manager/ActionBarManager.java

@@ -43,6 +43,7 @@ public class ActionBarManager implements IActionBarListener {
   private ProgressBar progressBar;
 
   private IActionBarListener listener;
+  private IActionBarListener.Scroll scrollListener;
 
   private ActionBarManager() {
   }
@@ -56,6 +57,31 @@ public class ActionBarManager implements IActionBarListener {
     this.listener = listener;
   }
 
+  /**
+   * 스크롤 이벤트 listener register
+   *
+   * @param scrollListener
+   */
+  public void setScrollListener(IActionBarListener.Scroll scrollListener) {
+    this.scrollListener = scrollListener;
+    if (null == scrollListener) {
+      this.appBarLayout.removeOnOffsetChangedListener(onOffsetChangedListener);
+    }
+    else {
+      this.appBarLayout.addOnOffsetChangedListener(onOffsetChangedListener);
+    }
+  }
+
+  private AppBarLayout.OnOffsetChangedListener onOffsetChangedListener = new AppBarLayout.OnOffsetChangedListener() {
+    @Override
+    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
+//      Log.i("APP# ActionBarManager | onOffsetChanged", "|" + "verticalOffset: " + verticalOffset);
+      if (null != scrollListener) {
+        scrollListener.onScroll(appBarLayout, verticalOffset);
+      }
+    }
+  };
+
   /**
    * actionBar 정보 받아옴.
    *
@@ -93,11 +119,12 @@ public class ActionBarManager implements IActionBarListener {
   public void setScrollable(boolean isEnabled) {
     AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
     CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
-    if(isEnabled) {
+    if (isEnabled) {
       params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL);
       appBarLayoutParams.setBehavior(new AppBarLayout.Behavior());
       appBarLayout.setLayoutParams(appBarLayoutParams);
-    } else {
+    }
+    else {
       params.setScrollFlags(0);
       appBarLayoutParams.setBehavior(null);
       appBarLayout.setLayoutParams(appBarLayoutParams);
@@ -288,20 +315,19 @@ public class ActionBarManager implements IActionBarListener {
   /***********************************
    * life-cycle
    ***********************************/
-  //  public void init() {
-//
-//  }
-//
-//  public void start() {
-//
-//  }
-//
-//  public void stop() {
-//
-//  }
-//
-//  public void dispose() {
-//
-//  }
+
+  public void dispose() {
+    if (null != appBarLayout) {
+      appBarLayout = null;
+      if (null != scrollListener) {
+        appBarLayout.addOnOffsetChangedListener(onOffsetChangedListener);
+      }
+    }
+    
+    scrollListener = null;
+
+    listener = null;
+    actionBar = null;
+  }
 
 }

+ 5 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/manager/IActionBarListener.java

@@ -15,6 +15,7 @@ package kr.co.zumo.app.lifeplus.manager;
  */
 
 
+import android.support.design.widget.AppBarLayout;
 import android.support.v7.app.ActionBar;
 
 /**
@@ -36,4 +37,8 @@ public interface IActionBarListener {
   void onClickBookmark(ActionBar actionBar);
 
   void onClickShare(ActionBar actionBar);
+
+  interface Scroll {
+    void onScroll(AppBarLayout appBarLayout, int verticalOffset);
+  }
 }