亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

banner疑問

整體講解很細,但存在幾個致命問題: 1、UI過度不友好,同事,在第一個或最后一個item上,滑動不能連貫 2、當有輪播item過多是會出現內存溢出 希望針對這個2個問題,進一步進行代碼處理和講解

正在回答

2 回答

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);
????????}
????}

}


0 回復 有任何疑惑可以回復我~
#1

TequilaDrc

請問TouchSlop要加在哪里?
2017-05-05 回復 有任何疑惑可以回復我~
#2

攻城獅ZSP 回復 TequilaDrc

加在自定義ViewGroup的構造函數或者構造函數調用的初始化函數中。
2017-05-16 回復 有任何疑惑可以回復我~

追加一個問題

bannerViewGroup攔截事件,是攔截了所有手勢操作,這樣當banner和一個垂直的scrollview結合時,會導致在banner上進行下滑操作無效

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
不一樣的自定義實現輪播圖效果
  • 參與學習       16248    人
  • 解答問題       47    個

Android開發自定義實現輪播圖效果案例實現,從無到有讓你會懂會用

進入課程

banner疑問

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號