Slide conflict between the Android slide menu and the slideshow image, android slide
To take over a project, you must modify the following question: a slideshow image cannot be moved manually. A manual slideshow image can only trigger a slide menu.
Guess: the touch event of the viewpager control is intercepted by the SlidingMenu control (a slide menu, not a third-party project, but customized by the previous Developer.
Based on this guess, I customize a ViewPager, rewrite dispatchTouchEvent, onInterceptTouchEvent, and onTouchEvent, and print logs in these three methods respectively;
Override the dispatchTouchEvent, onInterceptTouchEvent, and onTouchEvent of SlidingMenu, and print the log.
Re-compile and run the task:
06-08 09:52:08.394 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:006-08 09:52:08.395 19424-19424/com.parkingmore E/SlidingMenu: onInterceptTouchEvent ev:006-08 09:52:08.395 19424-19424/com.parkingmore E/RollViewPager: dispatchTouchEvent ev:006-08 09:52:08.395 19424-19424/com.parkingmore E/RollViewPager: onInterceptTouchEvent ev:006-08 09:52:08.441 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:206-08 09:52:08.441 19424-19424/com.parkingmore E/SlidingMenu: onInterceptTouchEvent ev:206-08 09:52:08.442 19424-19424/com.parkingmore E/SlidingMenu: ACTION_MOVE dx:15.47399906-08 09:52:08.442 19424-19424/com.parkingmore E/RollViewPager: ACTION_MOVE getCurrentItem():106-08 09:52:08.442 19424-19424/com.parkingmore E/RollViewPager: dispatchTouchEvent ev:206-08 09:52:08.442 19424-19424/com.parkingmore E/RollViewPager: onInterceptTouchEvent ev:206-08 09:52:08.459 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:206-08 09:52:08.459 19424-19424/com.parkingmore E/SlidingMenu: onInterceptTouchEvent ev:206-08 09:52:08.459 19424-19424/com.parkingmore E/RollViewPager: dispatchTouchEvent ev:306-08 09:52:08.459 19424-19424/com.parkingmore E/RollViewPager: onInterceptTouchEvent ev:306-08 09:52:08.477 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:206-08 09:52:08.477 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:206-08 09:52:08.495 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:206-08 09:52:08.495 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:206-08 09:52:08.515 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:206-08 09:52:08.515 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:206-08 09:52:08.533 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:206-08 09:52:08.533 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:206-08 09:52:08.551 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:206-08 09:52:08.551 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:206-08 09:52:08.574 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:206-08 09:52:08.574 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:206-08 09:52:08.594 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:206-08 09:52:08.595 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:206-08 09:52:08.611 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:206-08 09:52:08.612 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:206-08 09:52:08.622 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:206-08 09:52:08.622 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:206-08 09:52:08.623 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:1
View Code
It can be seen from the log that the sliding event can be passed to ViewPager at the beginning, and then it will be intercepted by SlidingMenu. This log confirms that this conjecture is correct.
If you know the reason, you can solve the problem. Now, I want to consider the effect to be achieved.
Expected effect: you can slide the slideshow image normally. When the slideshow is in the first one, you can slide to the slide menu.
Some people share similar issues on the Internet. I will also learn from it here.
First, implement the first function: you can slide the carousel image normally.
You can set a global variable: public static boolean mRollViewPagerTouching;
Used to indicate whether or not the image is being played by a touch.
In custom ViewPager, determine whether or not to touch the carousel Image
public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_DOWN: MyApplication.mRollViewPagerTouching = true; break; case MotionEvent.ACTION_UP: MyApplication.mRollViewPagerTouching = false; break; } return super.dispatchTouchEvent(ev); }
View Code
In SlidingMenu, perform the following processing:
public boolean onInterceptTouchEvent(MotionEvent ev) { if (MyApplication.mRollViewPagerTouching){ return false; } return super.onInterceptTouchEvent(ev); }
View Code
Re-compile and run the task. You can slide the slideshow image normally. However, when the slideshow is the first one, it cannot slide to the slide menu.
Now let's do the second function: When the carousel image is in the first one, you can slide to the slide menu.
There are two points to note: 1. when the carousel image is in the first image; 2. because my slide menu is on the left, you need to slide your fingers to the right to enter the slide menu, so the second condition should be right slide.
On the basis of the above, modify the custom ViewPager code
Public boolean dispatchTouchEvent (MotionEvent ev) {// go back to the starting coordinate float x = ev at the time of triggering. getX (); switch (ev. getAction () {case MotionEvent. ACTION_MOVE: // get the Distance Difference float dx = x-downX; // prevent the if (Math. abs (dx)> 8) {// determine the direction using the Distance Difference if (dx> 0) {// "right"; if (getCurrentItem () = 0) {MyApplication. mRollViewPagerTouching = false;} else {MyApplication. mRollViewPagerTouching = true ;}} else {// "Left"; MyApplication. mRollViewPagerTouching = true ;}} break; case MotionEvent. ACTION_DOWN: // store downX = x; MyApplication. mRollViewPagerTouching = true; break; case MotionEvent. ACTION_UP: MyApplication. mRollViewPagerTouching = false; break;} return super. dispatchTouchEvent (ev );}
View Code
Compile and run again to achieve the expected results.
Ps: simple functions and simple sharing.