package com.duguang.baseanimation.ui.imitate.waterfall; import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.MotionEvent; import android.view.View; import android.view.Window; import android.widget.LinearLayout; public class MyLinearLayout extends LinearLayout { private GestureDetector gestureDetector; private Context context; public MyLinearLayout(Context context, AttributeSet attrs) { super(context, attrs); this.context=context; gestureDetector = new GestureDetector(context,new OnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { // TODO Auto-generated method stub return false; } @Override public void onShowPress(MotionEvent e) { // TODO Auto-generated method stub } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return false; } @Override public void onLongPress(MotionEvent event) { View rootView = getRootView(); float eventX = event.getX(); int width=rootView.getWidth()/getChildCount(); if (eventX>width && eventX<2*width){ ConstantValue.POPFLAG2=true; ConstantValue.POPFLAG3=true; } } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // TODO Auto-generated method stub return false; } @Override public boolean onDown(MotionEvent e) { // TODO Auto-generated method stub return false; } }); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return true; } @Override public boolean dispatchTouchEvent(MotionEvent ev) { return super.dispatchTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { View rootView = getRootView(); int width=rootView.getWidth()/getChildCount(); int height = rootView.getHeight(); int count=getChildCount(); gestureDetector.onTouchEvent(event); float eventX = event.getX(); if (eventX<width){ event.setLocation(width/2, event.getY()); getChildAt(0).dispatchTouchEvent(event); return true; }else if (eventX>width && eventX<2*width){ float eventY = event.getY(); if (eventY<height/2){ event.setLocation(width/2, event.getY()); for (int i=0;i<count;i++){ View child = getChildAt(i); child.dispatchTouchEvent(event); } return true; }else if (eventY>height/2){ event.setLocation(width/2, event.getY()); getChildAt(1).dispatchTouchEvent(event); return true; } }else if (eventX>2*width){ event.setLocation(width/2, event.getY()); getChildAt(2).dispatchTouchEvent(event); return true; } return true; } }