Ò»Ö±ÒÔÀ´¶¼Ã»Ê±¼äºÃºÃдһ¸ö°²×¿Æ½Ì¨µÄ¿Í»§¶Ë£¬Ò»ÊÇÒòΪ×Ô¼ºË®Æ½»¹ºÜÓÐÏÞ£¬¶þÊÇÐèÒª»¨ºÜ¶àʱ¼äÀ´Î¬»¤Õâ¸öÍøÕ¾¡£µ«×Ô´Ó°Ù¶ÈÎÞÇéµÄ°ÑÍøÕ¾kÁËÖ®ºó£¬ÎÒ¾õµÃºÃºÃµÄͶÈëandroidƽ̨ÉÏÀ´ÁË¡£
ÎÒÏÖÔÚÏë×öµÄÊÇÒ»¸ö¼Çʱ¾³ÌÐò¡£
ΪÁËʵÏÖÕâ¸ö³ÌÐò£¬ÔÚ¸Õ¸Õ¿ªÊ¼Ñ§Ï°°²×¿µÄʱºòÎÒÕÒÁ˺ܶàÎÄÕ£¬×ÐϸÔĶÁÁ˰²×¿sdkÖеÄnotepadÀý×Ó³ÌÐò£¬Õâ¸öÀý×Ó³ÌÐòȷʵºÜÊʺÏÈëÃÅ£¬¿ÉÒÔÈÃÄãºÜ¿ì½Ó´¥µ½listviewÕâÑùµÄ»ù´¡¿Ø¼þ£¬°²×¿ÖÐÊý¾Ý¿â£¨SQLite£©µÄ²Ù×÷¡¢Êý¾Ý´æ´¢--ContentProvider£¬Fragment£¬InstanceStateÊý¾Ý±£´æ£¬ÒÔ¼°ÒâͼIntentµÄÓ÷¨£¬µ«ÊÇÀïÃæµÄºÜ¶à´¦Àí·½Ê½£¨±ÈÈçн¨Ò»¸ö¼Çʱ¾µÄÂß¼£©£¬ÏԵ÷dz£»ìÂÒ£¬ºÜÈÝÒ×·¢Éúbug£¬±Ï¾¹ÕâÖ»ÊÇÒ»¸öѧϰµÄdemo£¬ÈÃÄã»ñµÃ¸ü¶àµÄÖ»ÊDZÈÈÃÄã»ñµÃÒ»¸öappÖØÒª¡£
ÕâÎÒµÄÕâ¸öÍøÕ¾ÀïÃæÓкܶà¸Õ¸ÕËùÌáµ½µÄÏà¹ØÎÄÕ£¬¶¼ÊÇÎÒÆ½Ê±×ܽáµÄ£¬µÈÎÒÍê³ÉÕâÆªÎÄÕÂÖ®ºó£¬ÎÒ»áÕÒʱ¼ä°ÑÕâЩ×ÊÁÏËѼ¯ÔÚ´Ë£¬·½±ã´ó¼Ò²Î¿¼¡£
ÔÚÕâ¸ö¼Çʱ¾ÖУ¬ÎªÁËʵÏÖ¼Çʱ¾×óÓÒ»¬¶¯ÄÜ·µ½ÉÏһƪ»òÕßÏÂһƪ£¬ÎÒÃÇÒýÈëÁËÒ»¸ö×Ô¶¨ÒåµÄscrollLayoutÀ࣬scrollLayoutÀà¼Ì³Ð×ÔViewGroup£¬ÓÉÈý¸ö×Óview¹¹³É£¬µ«ÊÇÄÜÎÞÏÞÑ»·ÏÔʾ¡£scrollLayoutÀàµÄʵÏÖ½è¼øÁËÍøÉϺܶàViewGroup×Ô¶¨Òå×óÓÒ»¬¶¯ÀàµÄʵÏÖ£¬Ö»ÊÇÔö¼ÓÁËÎÞÏÞÑ»·»¬¶¯µÄ¹¦ÄÜ¡£
ÆäʵʵÏÖÕâÒ»¹¦ÄÜÔÚ×ʼÎÒÏëµ½µÄ²»ÊÇViewGroup£¬¶øÊÇViewPager£¬ÔÚ´òËãд¼Çʱ¾Ö®Ç°£¬ÎÒ×îÏÈÔÚ¶¹°êµÄÔĶÁÆ÷ÉÏ¿´µ½ÕâÖÖ×óÓÒ»¬¶¯·Ò³µÄЧ¹û£¬ºóÀ´·¢ÏÖ¶¹°ê¾ÍÊÇÓÃViewPagerÀ´ÊµÏֵġ£µ«ÊÇViewPagerÓиöÌìÈ»µÄȱÏÝ£¬¾ÍÊÇViewPager±ØÐë¸øËû¸³Ò»¸ö×ÓViewµÄ¸öÊý¡£Èç¹ûҪʵÏÖÑ»·»¬¶¯µÄ»°£¬Õâ¸ö¸öÊý±ØÐëºÜ´ó£¬±ÈÈçintµÄ×î´óÖµ¡£×îºóÐÞ¸ÄÒ»ÏÂViewPagerµÄһЩ·½·¨£¬¾ÍÄÜÄ£ÄâÉÙÊý¼¸¸ö×ÓViewÎÞÏÞÑ»·¡£ÕâÖÖ·½Ê½µÄЧ¹ûÆäʵ»¹²»´í¡£µ«ÊÇÒ»Ïëµ½Õâ¸öÑ»·ÔÚÖ±¹ÛÉÏ¿ÉÄÜÓкܴóµÄÀË·Ñ£¨ÊÂʵÉÏÓÐûÓÐÀ˷Ѳ»È·¶¨£©£¬ÎÒ¹û¶Ï·ÅÆúÁËÕâÖÖ·½Ê½¡£
scrollLayoutÀàҪʵÏÖÎÞÏÞÑ»·»¬¶¯»¹ÊDZȽÏÄѵ쬯äÖÐÓм¸¸öÐèÒª·Ç³£×ÐϸµÄµØ·½£¬²»È»»¬¶¯ÆðÀ´×ÜÊÇÓÐÈÃÈ˲»ÂúÒâµÄÇé¿ö¡£
1.computeScroll()·½·¨£º
computeScroll()·½·¨¸ºÔðÔÚmScroller£¨Ò»¸ö¹ö¶¯Àà³ÉÔ±±äÁ¿£©¹ö¶¯ºÍÊÖÖ¸Í϶¯µÄʱºòÒÆ¶¯scrollLayoutµÄÏÔʾλÖ᣺ܶàÈ˶¼²»Ã÷°×ViewGroupµÄÏÔʾλÖõ½µ×´ú±íʲô£¬ÕâÀïÎÒֻ˵Õâ¸öÏÔʾλÖÃÌåÏÖÔÚgetScrollXÕâ¸öÖµÖС£
if (mScroller.computeScrollOffset()) { mTouchX = mScroller.getCurrX(); Log.i("scroll","scrollling mTouchX="+mTouchX); scrollTo(mScroller.getCurrX(), mScroller.getCurrY()); postInvalidate(); }
ÉÏÃæµÄ´úÂë±íʾÈç¹û¹ö¶¯ÈÔÔÚ¼ÌÐø£¬ÄÇô֮ÐÐÆäÖеĴúÂë¡£µ«ÊÇÒ»µ©¹ö¶¯½áÊø£¬ÏÂÃæÕâ¶Î´úÂëÈÔ½«»áÖ´ÐУ¬¼´Ê¹ÄãµÄÊÖָʲô¶¼Ã»×ö¡£Ò²¾ÍÊÇ˵computeScroll·½·¨ÔÚûÓÐÈκβÙ×÷µÄÇé¿öÏ£¬»á´ÓmScroller
¿ªÊ¼µÄ˲¼äÒ»Ö±µ÷Óõ½½áÊøµÄ˲¼ä£¨°üÀ¨½áÊø£©¡£
else if (mNextScreen != INVALID_SCREEN) { if (mNextScreen == -1) { mCurrentScreen = getChildCount() - 1; mHander.queryForNewPage(PREVIEOUS, mCurrentScreen); scrollTo(mCurrentScreen * getWidth(), getScrollY()); } else if (mNextScreen == getChildCount()) { mCurrentScreen = 0; mHander.queryForNewPage(NEXT, mCurrentScreen); scrollTo(0, getScrollY()); } else { int temp = mCurrentScreen; mCurrentScreen = Math.max(0, Math.min(mNextScreen, getChildCount() - 1)); if (mNextScreen > temp) { mHander.queryForNewPage(NEXT, mCurrentScreen); } else { mHander.queryForNewPage(PREVIEOUS, mCurrentScreen); } } mNextScreen = INVALID_SCREEN; }