Example #1
0
 @Override
 public void onScroll(
     AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
   if (totalItemCount > visibleItemCount) {
     showFooterView();
   }
   mFirstVisibleItem = firstVisibleItem;
   if (mCurrScrollState == SCROLL_STATE_TOUCH_SCROLL
       && firstVisibleItem == 0
       && mHeaderLinearLayout.getBottom() >= 0
       && mHeaderLinearLayout.getBottom() < mHeaderHeight) {
     // 进入且仅进入下拉刷新状态
     if (mPullRefreshState == NONE_PULL_REFRESH) {
       mPullRefreshState = ENTER_PULL_REFRESH;
     }
   } else if (mCurrScrollState == SCROLL_STATE_TOUCH_SCROLL
       && firstVisibleItem == 0
       && mHeaderLinearLayout.getBottom() >= mHeaderHeight + 35) {
     // 下拉达到界限,进入松手刷新状态
     if (mPullRefreshState == ENTER_PULL_REFRESH || mPullRefreshState == NONE_PULL_REFRESH) {
       mPullRefreshState = OVER_PULL_REFRESH;
       // mDownY = mMoveY; // 为下拉1/3折扣效果记录开始位置
       headerInfo.setText("松手刷新"); // 显示松手刷新
       rotateArrow(ROTATE_UP);
       showArrow();
     }
   } else if (mCurrScrollState == SCROLL_STATE_TOUCH_SCROLL
       && firstVisibleItem == 0
       && mHeaderLinearLayout.getBottom() >= 0
       && mHeaderLinearLayout.getBottom() < mHeaderHeight + 20) {
     if (mPullRefreshState == ENTER_PULL_REFRESH || mPullRefreshState == OVER_PULL_REFRESH) {
       mPullRefreshState = ENTER_PULL_REFRESH;
       headerInfo.setText("下拉刷新"); // 显示下拉刷新
       rotateArrow(ROTATE_DOWN);
     }
   } else if (mCurrScrollState == SCROLL_STATE_TOUCH_SCROLL && firstVisibleItem != 0) {
     if (mPullRefreshState == ENTER_PULL_REFRESH || mPullRefreshState == OVER_PULL_REFRESH) {
       mPullRefreshState = NONE_PULL_REFRESH; // 停止刷新
     }
   } else if (mCurrScrollState == SCROLL_STATE_FLING && firstVisibleItem == 0) {
     // 飞滑状态,不能显示出header,也不能影响正常的飞滑,只在正常情况下才纠正位置
     if (mPullRefreshState == NONE_PULL_REFRESH) {
       setSelection(1);
     }
   }
 }
        public boolean onTouch(View v, MotionEvent event) {
          // TODO Auto-generated method stub
          dismissPopupWindow();

          switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
              mEventStartX = (int) event.getX();
              // mEventStartY = (int) event.getY();
              break;
            case MotionEvent.ACTION_UP:
              // *图表点击坐标
              mEventEndX = (int) event.getX();
              mEventEndY = (int) event.getY();
              System.out.println("1.------------------------------");
              // 屏幕是否位移
              mScreenOffsetX += mEventEndX - mEventStartX == 0 ? 0 : mEventEndX - mEventStartX;
              // 是否超出X轴原点(是,归0)
              mScreenOffsetX = mScreenOffsetX > 0 ? 0 : mScreenOffsetX;
              System.out.println("############ mOffsetX = " + mScreenOffsetX);
              if (event.getX() < CHART_MARGINS_LEFT
                  || event.getX() > containerbody.getRight() - CHART_MARGINS_LEFT
                  || event.getY() < CHART_MARGINS_TOP
                  || event.getY() > containerbody.getBottom() - CHART_MARGINS_TOP) {
                // out of the chartView, do nothing.
              } else {
                // 取屏幕宽、高
                int screenWidth = getWindowManager().getDefaultDisplay().getWidth();
                int screenHeight = getWindowManager().getDefaultDisplay().getHeight();
                // 取图表区域宽、高
                int chartViewWidth = mLineChartView.getWidth();
                int chartViewHeight = mLineChartView.getHeight();
                // 求图表单元格宽、高
                int chartCellWidth = (chartViewWidth - CHART_MARGINS_LEFT * 2) / CHART_X_LABELS;
                int chartCellHeight =
                    (chartViewHeight - CHART_MARGINS_TOP - chart_margins_bottom) / CHART_Y_LABELS;
                // 是否超出X轴上限(是,取上限值)
                mScreenOffsetX =
                    mScreenOffsetX < -chartCellWidth * (panXLimit - CHART_X_AXISMAX)
                        ? -chartCellWidth * (panXLimit - CHART_X_AXISMAX)
                        : mScreenOffsetX;
                System.out.println(
                    "-chartCellWidth * panXLimit = "
                        + -chartCellWidth * (panXLimit - CHART_X_AXISMAX));
                System.out.println("@@@@mScreenOffsetX = " + mScreenOffsetX);
                // *求图表像素坐标 换算成图表单位坐标
                int chartEventX =
                    1 + Math.round((mEventEndX - CHART_MARGINS_LEFT) / chartCellWidth);
                int chartEventY =
                    CHART_Y_AXISMAX
                        - Math.round((mEventEndY - CHART_MARGINS_TOP) / chartCellHeight * 10);
                System.out.println("chartEventX = " + chartEventX);
                System.out.println("chartEventY = " + chartEventY);
                // 求位移单元格
                int chartOffsetX = Math.round(mScreenOffsetX / chartCellWidth);
                System.out.println("############ chartOffsetX = " + chartOffsetX);
                System.out.println("2.================================");
                // 求图表像素坐标 换算成屏幕像素坐标
                int screenEventX = mEventEndX + (screenWidth - chartViewWidth) / 2;
                int screenEventY = mEventEndY + (screenHeight - chartViewHeight) / 2;
                // System.out.println("chartEventX = " + event.getX());
                // System.out.println("chartEventY = " + event.getY());
                // System.out.println("screenEventX = " + screenEventX);
                // System.out.println("screenEventY = " + screenEventY);

                boolean mType = true;
                isShowPopWin:
                for (int i = 0; i < lineEndX; i++) {
                  int pxSeriesX =
                      ((int) (series.getX(i)) - 1) * chartCellWidth + CHART_MARGINS_LEFT;
                  int pxSeriesY =
                      (CHART_Y_AXISMAX - (int) (series.getY(i))) * chartCellHeight / 10
                          + CHART_MARGINS_TOP;
                  System.out.println("3.**********************************");
                  // System.out.println(" mEventEndX = " + mEventEndX);
                  // System.out.println(" pxSeriesX + mScreenOffsetX - chartCellWidth / 2 = "
                  // + (pxSeriesX + mScreenOffsetX - chartCellWidth / 2));
                  // System.out.println(" pxSeriesX + mScreenOffsetX + chartCellWidth / 2 = "
                  // + (pxSeriesX + mScreenOffsetX + chartCellWidth / 2));
                  // System.out.println(" mEventEndY = " + mEventEndY);
                  // System.out.println(" pxSeriesY - chartCellHeight / 2 = "
                  // + (pxSeriesY - chartCellHeight / 2));
                  // System.out.println(" pxSeriesY + chartCellHeight / 2 = "
                  // + (pxSeriesY + chartCellHeight / 2));

                  if (mEventEndX > pxSeriesX + mScreenOffsetX - chartCellWidth / 2
                      && mEventEndX < pxSeriesX + mScreenOffsetX + chartCellWidth / 2
                      && mEventEndY > pxSeriesY - chartCellHeight / 2
                      && mEventEndY < pxSeriesY + chartCellHeight / 2) {
                    System.out.println(" series.getX(i) = " + series.getX(i));
                    System.out.println(" pxSeriesX = " + pxSeriesX);

                    mDataMap = mDataMapList.get(i);
                    String bustotal = mDataMap.get("BUSTOTAL").toString();
                    String busunsuccess = mDataMap.get("BUSUNSUCCESS").toString();
                    touchPoint = i;
                    // 根据type,判断窗口绿or蓝
                    if ("0".equals(mDataMap.get("type").toString())) {
                      mType = false;
                      mPopTxt1.setText("预约" + bustotal + "条");
                      mPopTxt2.setText(busunsuccess + "条");
                    } else {
                      mType = true;
                      mPopTxt4.setText("已办理" + bustotal + "条");
                    }
                    if (screenWidth - screenEventX < POPWIN_WIDTH) {
                      mPopupView.setBackgroundDrawable(
                          getResources().getDrawable(R.drawable.switch_on));
                      mPopupView.setPadding(
                          0,
                          dip2px(app_query_temperature_Activity.this, 30),
                          dip2px(app_query_temperature_Activity.this, 23),
                          0);
                      mPopTxt1.setGravity(Gravity.RIGHT);
                      mPopTxt2.setGravity(Gravity.RIGHT);
                      mPopTxt3.setGravity(Gravity.RIGHT);

                      mPopupView1.setBackgroundDrawable(
                          getResources().getDrawable(R.drawable.switch_on));
                      mPopupView1.setPadding(
                          0,
                          dip2px(app_query_temperature_Activity.this, 30),
                          dip2px(app_query_temperature_Activity.this, 23),
                          0);
                      mPopTxt4.setGravity(Gravity.RIGHT);

                      screenEventX -= POPWIN_WIDTH;
                    } else {
                      mPopupView.setBackgroundDrawable(
                          getResources().getDrawable(R.drawable.switch_off));
                      mPopupView.setPadding(
                          dip2px(app_query_temperature_Activity.this, 23),
                          dip2px(app_query_temperature_Activity.this, 30),
                          0,
                          0);
                      mPopTxt1.setGravity(Gravity.LEFT);
                      mPopTxt2.setGravity(Gravity.LEFT);
                      mPopTxt3.setGravity(Gravity.LEFT);

                      mPopupView1.setBackgroundDrawable(
                          getResources().getDrawable(R.drawable.switch_off));
                      mPopupView1.setPadding(
                          dip2px(app_query_temperature_Activity.this, 20),
                          dip2px(app_query_temperature_Activity.this, 30),
                          0,
                          0);
                      mPopTxt4.setGravity(Gravity.LEFT);
                    }

                    mPopupWindow = new PopupWindow(mPopupView, POPWIN_WIDTH, POPWIN_HEIGHT);
                    mPopupWindow1 = new PopupWindow(mPopupView1, POPWIN_WIDTH1, POPWIN_HEIGHT1);
                    if (mType) {
                      if (mPopupWindow1.isShowing()) {
                        mPopupWindow1.update(
                            screenEventX, screenEventY, POPWIN_WIDTH, POPWIN_HEIGHT);
                      } else {
                        mPopupWindow1.showAtLocation(
                            mLineChartView, Gravity.NO_GRAVITY, screenEventX, screenEventY);
                      }
                    } else { // + POPWIN_HEIGHT / 2
                      if (mPopupWindow.isShowing()) {
                        mPopupWindow.update(
                            screenEventX, screenEventY, POPWIN_WIDTH, POPWIN_HEIGHT);
                      } else {
                        mPopupWindow.showAtLocation(
                            mLineChartView, Gravity.NO_GRAVITY, screenEventX, screenEventY);
                      }
                    }

                    break isShowPopWin;
                  }
                }
              }
              break;
            default:
              break;
          }
          return false;
        }