You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by mi...@apache.org on 2017/08/16 03:49:17 UTC

[09/13] incubator-weex git commit: * [android] using independent Handler to handle auto scroll

* [android] using independent Handler to handle auto scroll


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/a62383e6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/a62383e6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/a62383e6

Branch: refs/heads/0.16-dev
Commit: a62383e6f49af57d60fbcbd9ecbe1b17724b02f5
Parents: fe0b41e
Author: misakuo <mi...@apache.org>
Authored: Tue Aug 15 16:12:04 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Tue Aug 15 16:12:04 2017 +0800

----------------------------------------------------------------------
 .../taobao/weex/ui/view/WXCircleViewPager.java  | 36 ++++++++++++++------
 1 file changed, 25 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a62383e6/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
index 93cac73..7e8e091 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
@@ -22,6 +22,7 @@ import android.annotation.SuppressLint;
 import android.content.Context;
 import android.os.Handler;
 import android.os.Looper;
+import android.os.Message;
 import android.support.v4.view.PagerAdapter;
 import android.support.v4.view.ViewPager;
 import android.util.AttributeSet;
@@ -41,6 +42,7 @@ import java.lang.reflect.Field;
 @SuppressLint("HandlerLeak")
 public class WXCircleViewPager extends ViewPager implements WXGestureObservable {
 
+  private final int SCROLL_TO_NEXT = 1;
   private WXGesture wxGesture;
   private boolean isAutoScroll;
   private long intervalTime = 3 * 1000;
@@ -48,7 +50,17 @@ public class WXCircleViewPager extends ViewPager implements WXGestureObservable
   private boolean needLoop = true;
   private boolean scrollable = true;
   private int mState = ViewPager.SCROLL_STATE_IDLE;
-  private Handler mAutoScrollHandler;
+  private Handler mAutoScrollHandler = new Handler(Looper.getMainLooper()) {
+    @Override
+    public void handleMessage(Message msg) {
+      if (msg.what == SCROLL_TO_NEXT) {
+        showNextItem();
+        this.sendEmptyMessageDelayed(SCROLL_TO_NEXT, intervalTime);
+        return;
+      }
+      super.handleMessage(msg);
+    }
+  };
 
   private Runnable scrollAction = new ScrollAction(this);
 
@@ -59,7 +71,6 @@ public class WXCircleViewPager extends ViewPager implements WXGestureObservable
   }
 
   private void init() {
-    mAutoScrollHandler = new Handler(Looper.getMainLooper());
     setOverScrollMode(View.OVER_SCROLL_NEVER);
 
     addOnPageChangeListener(new OnPageChangeListener() {
@@ -153,12 +164,14 @@ public class WXCircleViewPager extends ViewPager implements WXGestureObservable
    */
   public void startAutoScroll() {
     isAutoScroll = true;
-    mAutoScrollHandler.removeCallbacks(scrollAction);
-    mAutoScrollHandler.postDelayed(scrollAction, intervalTime);
+    mAutoScrollHandler.removeCallbacksAndMessages(null);
+    mAutoScrollHandler.sendEmptyMessageDelayed(SCROLL_TO_NEXT, intervalTime);
+//    mAutoScrollHandler.removeCallbacksAndMessages(scrollAction);
+//    mAutoScrollHandler.postDelayed(scrollAction, intervalTime);
   }
 
   public void pauseAutoScroll(){
-    mAutoScrollHandler.removeCallbacks(scrollAction);
+    mAutoScrollHandler.removeCallbacksAndMessages(null);
   }
 
   /**
@@ -166,7 +179,7 @@ public class WXCircleViewPager extends ViewPager implements WXGestureObservable
    */
   public void stopAutoScroll() {
     isAutoScroll = false;
-    mAutoScrollHandler.removeCallbacks(scrollAction);
+    mAutoScrollHandler.removeCallbacksAndMessages(null);
   }
 
   public boolean isAutoScroll() {
@@ -219,12 +232,13 @@ public class WXCircleViewPager extends ViewPager implements WXGestureObservable
     switch (ev.getAction()) {
       case MotionEvent.ACTION_DOWN:
       case MotionEvent.ACTION_MOVE:
-        mAutoScrollHandler.removeCallbacks(scrollAction);
+        mAutoScrollHandler.removeCallbacksAndMessages(null);
         break;
       case MotionEvent.ACTION_UP:
       case MotionEvent.ACTION_CANCEL:
         if (isAutoScroll()) {
-          mAutoScrollHandler.postDelayed(scrollAction, intervalTime);
+          mAutoScrollHandler.sendEmptyMessageDelayed(SCROLL_TO_NEXT, intervalTime);
+          //postDelayed(scrollAction, intervalTime);
         }
         break;
     }
@@ -300,7 +314,7 @@ public class WXCircleViewPager extends ViewPager implements WXGestureObservable
   @Override
   protected void onDetachedFromWindow() {
     super.onDetachedFromWindow();
-    mAutoScrollHandler.removeCallbacks(scrollAction);
+    mAutoScrollHandler.removeCallbacksAndMessages(null);
   }
 
   private static final class ScrollAction implements Runnable {
@@ -315,8 +329,8 @@ public class WXCircleViewPager extends ViewPager implements WXGestureObservable
       WXCircleViewPager target;
       if ((target = targetRef.get()) != null) {
         target.showNextItem();
-        target.mAutoScrollHandler.removeCallbacks(this);
-        target.mAutoScrollHandler.postDelayed(this, target.getIntervalTime());
+        target.removeCallbacks(this);
+        target.postDelayed(this, target.getIntervalTime());
       }
     }
   }