91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android ScrollView嵌套橫向滑動控件時沖突問題

發布時間:2020-09-24 08:20:33 來源:腳本之家 閱讀:605 作者:我和程序猿的日常 欄目:移動開發

前言:今天在開發的時候遇到這樣的問題,最外層是ScrollView,里面嵌套了一個橫向滑動的日歷控件,在滑動日歷的時候很卡頓。看到這種問題,自然而然的就會想到scrollview和其他可滑動控件的沖突問題。

解決思路

用戶的左右滑動操作被最外層的scrollView控件處理掉了,所以只要讓scrollview對左右滑動事件不監聽,讓其子控件處理左右滑動事件 。重寫scrollview的onInterceptTouchEvent方法,當上下滑動時不處理即可。

代碼如下

public void setOnScollChangedListener(OnScollChangedListener onScollChangedListener) {
  this.onScollChangedListener = onScollChangedListener;
}

@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
  super.onScrollChanged(x, y, oldx, oldy);
  if (onScollChangedListener != null) {
    onScollChangedListener.onScrollChanged(this, x, y, oldx, oldy);
  }
}

public interface OnScollChangedListener {

  void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);

}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
  switch (ev.getAction()) {
  case MotionEvent.ACTION_DOWN:
    xDistance = yDistance = 0f;
    xLast = ev.getX();
    yLast = ev.getY();
    break;
  case MotionEvent.ACTION_MOVE:
    final float curX = ev.getX();
    final float curY = ev.getY();

    xDistance += Math.abs(curX - xLast);
    yDistance += Math.abs(curY - yLast);
    xLast = curX;
    yLast = curY;

    /**
     * X軸滑動距離大于Y軸滑動距離,也就是用戶橫向滑動時,返回false,ScrollView不處理這次事件,
     * 讓子控件中的TouchEvent去處理,所以橫向滑動的事件交由子控件處理, ScrollView只處理縱向滑動事件
     */
    if (xDistance > yDistance) {
      return false;
    }
  }

  return super.onInterceptTouchEvent(ev);
}
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黑河市| 晋州市| 巫山县| 石首市| 定陶县| 东台市| 韶山市| 乌兰察布市| 吕梁市| 定安县| 金寨县| 逊克县| 洛阳市| 赫章县| 湘西| 武平县| 信阳市| 丘北县| 治多县| 西城区| 乌苏市| 墨竹工卡县| 建德市| 太仆寺旗| 太仓市| 牙克石市| 维西| 堆龙德庆县| 华宁县| 内江市| 罗源县| 逊克县| 蒲城县| 五常市| 乌苏市| 桐乡市| 游戏| 宜阳县| 石泉县| 玉环县| 沅陵县|