課程
/移動開發
/Android
/不一樣的自定義實現輪播圖效果
整體講解很細,但存在幾個致命問題: 1、UI過度不友好,同事,在第一個或最后一個item上,滑動不能連貫 2、當有輪播item過多是會出現內存溢出 希望針對這個2個問題,進一步進行代碼處理和講解
2017-03-16
源自:不一樣的自定義實現輪播圖效果 3-1
正在回答
1、針對內存溢出問題,不應該傳遞Bitmap,直接傳遞R.drawable.xxx到里面即可;
2、攔截問題,修改如下:
定義一個TouchSlop
mTouchSlop?=?ViewConfiguration.get(context).getScaledPagingTouchSlop();
????@Override ????public?boolean?onInterceptTouchEvent(MotionEvent?ev)?{ ????????switch?(ev.getAction())?{ ????????????case?MotionEvent.ACTION_DOWN: ????????????????stopAuto(); ????????????????isClick?=?true; ????????????????mStartX?=?(int)?ev.getX(); ????????????????mPreviousX?=?mStartX; ????????????????break; ????????????case?MotionEvent.ACTION_MOVE: ????????????????int?diff?=?(int)?Math.abs(ev.getX()?-?mStartX); ????????????????mPreviousX?=?(int)?ev.getX(); ????????????????//橫向滑動距離超過slop值才攔截; ????????????????if?(diff?>?mTouchSlop)?{ ????????????????????isClick?=?false; ????????????????????return?true; ????????????????} ????????????????break; ????????????case?MotionEvent.ACTION_UP: ????????????????if?(isClick)?{ ????????????????????listener.onClick(mIndex); ????????????????} ????????????????startAuto(); ????????????????break; ????????} ????????return?super.onInterceptTouchEvent(ev); ????}
????//攔截后處理該事件; ????@Override ????public?boolean?onTouchEvent(MotionEvent?event)?{ ????????switch?(event.getAction())?{ ????????????case?MotionEvent.ACTION_MOVE: ????????????????int?moveX?=?(int)?event.getX(); ????????????????int?distance?=?moveX?-?mPreviousX; ????????????????scrollBy(-distance,?0); ????????????????mPreviousX?=?moveX; ????????????????break; ????????????case?MotionEvent.ACTION_UP: ????????????????int?scrollX?=?getScrollX(); ????????????????mIndex?=?(scrollX?+?mChildWidth?/?2)?/?mChildWidth; ????????????????if?(mIndex?<?0)?{ ????????????????????mIndex?=?0; ????????????????}?else?if?(mIndex?>?mChildCount?-?1)?{ ????????????????????mIndex?=?mChildCount?-?1; ????????????????} ????????????????int?dx=mIndex?*?mChildWidth?-?scrollX; ????????????????mScroller.startScroll(scrollX,?0,dx?,?0); ????????????????invalidate(); ????????????????startAuto(); ????????????????changedListener.onImageChanged(mIndex); ????????????????break; ????????} ????????return?super.onTouchEvent(event); ????}
使用這個方法有一個注意點,就是每一個ImageView一定要加一個Clickable.
protected?void?onLayout(boolean?changed,?int?l,?int?t,?int?r,?int?b)?{ ????if?(changed)?{ ????????int?leftMargin?=?0; ????????for?(int?i?=?0;?i?<?mChildCount;?i++)?{ ????????????View?child?=?getChildAt(i); ????????????child.layout(leftMargin,?0,?leftMargin?+?mChildWidth,?mChildHeight); ????????????leftMargin?+=?mChildWidth; ????????????//加一個Clickable. ????????????child.setClickable(true); ????????} ????} }
TequilaDrc
攻城獅ZSP 回復 TequilaDrc
追加一個問題
bannerViewGroup攔截事件,是攔截了所有手勢操作,這樣當banner和一個垂直的scrollview結合時,會導致在banner上進行下滑操作無效
舉報
Android開發自定義實現輪播圖效果案例實現,從無到有讓你會懂會用
1 回答放在scrollview里的問題
2 回答點擊出錯的問題
1 回答關于構造函數的問題。
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2017-03-20
1、針對內存溢出問題,不應該傳遞Bitmap,直接傳遞R.drawable.xxx到里面即可;
2、攔截問題,修改如下:
定義一個TouchSlop
使用這個方法有一個注意點,就是每一個ImageView一定要加一個Clickable.
2017-03-16
追加一個問題
bannerViewGroup攔截事件,是攔截了所有手勢操作,這樣當banner和一個垂直的scrollview結合時,會導致在banner上進行下滑操作無效