OSDN Git Service

Filter touch events in ExpandableView.
authorJorim Jaggi <jjaggi@google.com>
Fri, 2 May 2014 15:29:56 +0000 (17:29 +0200)
committerJorim Jaggi <jjaggi@google.com>
Fri, 2 May 2014 15:29:56 +0000 (17:29 +0200)
Because the actual height is the different as the laid out one, we
need to filter the touch events here.

Change-Id: I6abd3fb0fffe275c2b83e7c48df1dd866499a28c

packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java

index 1664a32..33e9051 100644 (file)
@@ -23,6 +23,7 @@ import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.InsetDrawable;
 import android.util.AttributeSet;
+import android.view.MotionEvent;
 import android.view.View;
 import android.widget.FrameLayout;
 
@@ -49,6 +50,19 @@ public abstract class ExpandableView extends FrameLayout {
         mActualHeightInitialized = true;
     }
 
+    @Override
+    public boolean dispatchTouchEvent(MotionEvent ev) {
+        if (filterMotionEvent(ev)) {
+            return super.dispatchTouchEvent(ev);
+        }
+        return false;
+    }
+
+    private boolean filterMotionEvent(MotionEvent event) {
+        return event.getActionMasked() != MotionEvent.ACTION_DOWN
+                || event.getY() > mClipTopAmount && event.getY() < mActualHeight;
+    }
+
     /**
      * Sets the actual height of this notification. This is different than the laid out
      * {@link View#getHeight()}, as we want to avoid layouting during scrolling and expanding.