中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

秦皇岛市| 延津县| 龙南县| 芜湖市| 宁南县| 襄垣县| 昭觉县| 逊克县| 南涧| 双流县| 宁化县| 涿鹿县| 石柱| 长沙市| 凤翔县| 盐城市| 富民县| 图木舒克市| 新巴尔虎左旗| 神木县| 枣庄市| 富顺县| 上思县| 会同县| 内黄县| 二手房| 江达县| 姚安县| 常宁市| 无为县| 和林格尔县| 徐水县| 曲沃县| 大理市| 德安县| 中超| 许昌县| 河曲县| 罗江县| 迁西县| 汉寿县|