예제 #1
0
        public void handleMessage(android.os.Message msg) {
          switch (msg.what) {
            case REFRESH_BACKING: // 反弹中
              mHeaderLinearLayout.setPadding(
                  mHeaderLinearLayout.getPaddingLeft(),
                  (int) (mHeaderLinearLayout.getPaddingTop() * 0.75f),
                  mHeaderLinearLayout.getPaddingRight(),
                  mHeaderLinearLayout.getPaddingBottom());
              showProgressBar();
              break;

            case REFRESH_BACED: // 达到刷新界限,反弹结束后,加载数据
              headerInfo.setText("正在加载...");
              rotateArrow(ROTATE_DOWN);
              showProgressBar();
              mPullRefreshState = EXIT_PULL_REFRESH;
              new Thread() {
                public void run() {
                  if (mRefreshListener != null) {
                    mRefreshObject = mRefreshListener.refreshing();
                  }
                  Message msg = mHandler.obtainMessage();
                  msg.what = REFRESH_DONE;
                  msg.sendToTarget();
                };
              }.start();
              break;

            case REFRESH_RETURN: // 没有达到刷新界限,返回
              headerInfo.setText("下拉刷新");
              rotateArrow(ROTATE_DOWN);
              showArrow();
              mHeaderLinearLayout.setPadding(
                  mHeaderLinearLayout.getPaddingLeft(),
                  0,
                  mHeaderLinearLayout.getPaddingRight(),
                  mHeaderLinearLayout.getPaddingBottom());
              mPullRefreshState = NONE_PULL_REFRESH;
              setSelection(1);
              break;

            case REFRESH_DONE: // 加载数据结束
              headerInfo.setText("下拉刷新");
              headerTime.setText("更新时间为: " + mSimpleDateFormat.format(new Date()));
              rotateArrow(ROTATE_DOWN);
              showArrow();
              mHeaderLinearLayout.setPadding(
                  mHeaderLinearLayout.getPaddingLeft(),
                  0,
                  mHeaderLinearLayout.getPaddingRight(),
                  mHeaderLinearLayout.getPaddingBottom());
              mPullRefreshState = NONE_PULL_REFRESH;
              setSelection(1);
              if (mRefreshListener != null) {
                mRefreshListener.refreshed(mRefreshObject);
              }
              break;
          }
        };
 private int[] getDims(LinearLayout ll) {
   int[] diems = new int[4];
   diems[0] = ll.getPaddingLeft();
   diems[1] = ll.getPaddingTop();
   diems[2] = ll.getPaddingRight();
   diems[3] = ll.getPaddingBottom();
   return diems;
 }
예제 #3
0
 /**
  * Sets right view to arbitrary view
  *
  * @param view
  */
 public void setRightView(View view) {
   android.widget.LinearLayout.LayoutParams pl =
       new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
   if (view instanceof UserPictureView) pl.rightMargin = 0;
   else pl.rightMargin = mLayout.getPaddingLeft();
   pl.weight = 1;
   pl.gravity = Gravity.CENTER_VERTICAL | Gravity.RIGHT;
   mLayout.addView(view, -1, pl);
   mLayout.setVisibility(View.VISIBLE);
 }
  private void init(Context context) {
    // 设置滑动效果
    animation =
        new RotateAnimation(
            0,
            -180,
            RotateAnimation.RELATIVE_TO_SELF,
            0.5f,
            RotateAnimation.RELATIVE_TO_SELF,
            0.5f);
    animation.setInterpolator(new LinearInterpolator());
    animation.setDuration(100);
    animation.setFillAfter(true);

    reverseAnimation =
        new RotateAnimation(
            -180,
            0,
            RotateAnimation.RELATIVE_TO_SELF,
            0.5f,
            RotateAnimation.RELATIVE_TO_SELF,
            0.5f);
    reverseAnimation.setInterpolator(new LinearInterpolator());
    reverseAnimation.setDuration(100);
    reverseAnimation.setFillAfter(true);

    inflater = LayoutInflater.from(context);
    headView = (LinearLayout) inflater.inflate(R.layout.pull_to_refresh_head, null);

    arrowImageView = (ImageView) headView.findViewById(R.id.head_arrowImageView);
    arrowImageView.setMinimumWidth(50);
    arrowImageView.setMinimumHeight(50);
    progressBar = (ProgressBar) headView.findViewById(R.id.head_progressBar);
    tipsTextview = (TextView) headView.findViewById(R.id.head_tipsTextView);
    lastUpdatedTextView = (TextView) headView.findViewById(R.id.head_lastUpdatedTextView);

    headContentOriginalTopPadding = headView.getPaddingTop();

    measureView(headView);
    headContentHeight = headView.getMeasuredHeight();
    headContentWidth = headView.getMeasuredWidth();

    headView.setPadding(
        headView.getPaddingLeft(),
        -1 * headContentHeight,
        headView.getPaddingRight(),
        headView.getPaddingBottom());
    headView.invalidate();

    // System.out.println("初始高度�?+headContentHeight);
    // System.out.println("初始TopPad�?+headContentOriginalTopPadding);

    addHeaderView(headView);
    setOnScrollListener(this);
  }
  private void init(Context context) {
    headerRelativeLayout = (LinearLayout) inflate(context, R.layout.refresh_header_view, null);
    arrowImage = (ImageView) headerRelativeLayout.findViewById(R.id.head_arrowImageView);
    progressBar = (ProgressBar) headerRelativeLayout.findViewById(R.id.head_progressBar);
    headerTextView = (TextView) headerRelativeLayout.findViewById(R.id.head_tipsTextView);
    headerTextView.setText(R.string.pull_to_refresh);
    lastUpdateDateTextView =
        (TextView) headerRelativeLayout.findViewById(R.id.head_lastUpdatedDateTextView);
    lastUpdateDateTextView.setText("");
    headerRelativeLayout.setPadding(
        headerRelativeLayout.getPaddingLeft(),
        -1 * HEADER_HEIGHT,
        0,
        headerRelativeLayout.getPaddingBottom());
    this.addHeaderView(headerRelativeLayout, null, false);

    footerLayout = (RelativeLayout) inflate(context, R.layout.refresh_footer_view, null);
    footerProgressBar = (ProgressBar) footerLayout.findViewById(R.id.footer_progressBar);
    footerLayout.setOnClickListener(loadMoreClickListener);
    this.addFooterView(footerLayout, null, false);
    isLoadingMore = false;

    // isDragging = false;
    currentState = STATE_PULL_TO_REFRESH;
    this.setOnScrollListener(this);

    rotateAnimation =
        new RotateAnimation(
            0,
            -180,
            RotateAnimation.RELATIVE_TO_SELF,
            0.5f,
            RotateAnimation.RELATIVE_TO_SELF,
            0.5f);
    rotateAnimation.setInterpolator(new LinearInterpolator());
    rotateAnimation.setDuration(250);
    rotateAnimation.setFillAfter(true);

    reverseRotateAnimation =
        new RotateAnimation(
            -180,
            0,
            RotateAnimation.RELATIVE_TO_SELF,
            0.5f,
            RotateAnimation.RELATIVE_TO_SELF,
            0.5f);
    reverseRotateAnimation.setInterpolator(new LinearInterpolator());
    reverseRotateAnimation.setDuration(1);
    reverseRotateAnimation.setFillAfter(true);
  }
    public void performValidation() {
      getEditText().setError(null);
      if (editTextValidator.isValidity()) {
        // Dismiss once everything is OK.
        theDialog.dismiss();
        ValidatingEditTextPreference.this.onClick(theDialog, AlertDialog.BUTTON_POSITIVE);

        // reset padding - for when dialog is used again
        if (originalBottomPadding != Integer.MIN_VALUE) {
          LinearLayout parentLayout = (LinearLayout) getEditText().getParent();

          if (originalBottomPadding == parentLayout.getPaddingBottom()) {
            parentLayout.setPadding(
                parentLayout.getPaddingLeft(),
                parentLayout.getPaddingTop(),
                parentLayout.getPaddingRight(),
                originalBottomPadding);
          }
        }
      } else {

        // increase padding so error message doesn't cover buttons
        if (originalBottomPadding != Integer.MIN_VALUE) {
          LinearLayout parentLayout = (LinearLayout) getEditText().getParent();

          if (originalBottomPadding == parentLayout.getPaddingBottom()) {
            parentLayout.setPadding(
                parentLayout.getPaddingLeft(),
                parentLayout.getPaddingTop(),
                parentLayout.getPaddingRight(),
                (int) (parentLayout.getPaddingBottom() + getEditText().getHeight() * 1.05));
          }
        }

        // don't dismiss the dialog
      }
    }
  public void onRefreshStart() {
    headerRelativeLayout.setPadding(
        headerRelativeLayout.getPaddingLeft(),
        HEADER_TOP,
        0,
        headerRelativeLayout.getPaddingBottom());

    progressBar.setVisibility(View.VISIBLE);
    arrowImage.setVisibility(View.GONE);
    isLoading = true;

    if (refreshDelegate != null) {
      refreshDelegate.startFresh();
    }
  }
예제 #8
0
  private void initViews() {
    logo = (ImageView) findViewById(R.id.img_login);
    et1 = (EditText) findViewById(R.id.et_login_account);
    et2 = (EditText) findViewById(R.id.et_login_password);

    sLayout = (LinearLayout) findViewById(R.id.layout_login);
    sLayPadRect =
        new Rect(
            sLayout.getPaddingLeft(),
            sLayout.getPaddingTop(),
            sLayout.getPaddingRight(),
            sLayout.getPaddingBottom());

    if (resizeLayout != null) {
      resizeLayout.setOnResizeListener(
          new JackResizeLayout.OnResizeListener() {

            @Override
            public void OnResize(int w, int h, int oldw, int oldh) {

              if (sLayout != null && sLayPadRect != null) {
                mHandler.sendEmptyMessage(oldh > h ? 1 : 2);
              }
            }
          });
    }

    sButton = (Button) findViewById(R.id.btn_log);
    JackButtonColorFilter.setButtonFocusChanged(sButton);
    sButton.setOnClickListener(this);

    tv1 = (TextView) findViewById(R.id.tv_register);
    tv2 = (TextView) findViewById(R.id.tv_guest);
    JackUtils.textpaint_underline(tv1);
    JackUtils.textpaint_underline(tv2);
    tv1.setOnClickListener(this);
    tv2.setOnClickListener(this);

    pref = getSharedPreferences(getString(R.string.preference), Context.MODE_PRIVATE);
    if (pref.contains(getString(R.string.pref_username)))
      et1.setText(pref.getString(getString(R.string.pref_username), "d"));
    if (!pref.contains(getString(R.string.notfirsttime))) {
      goSlide();
    }
  }
  public void onRefreshComplete() {
    progressBar.setVisibility(View.GONE);
    arrowImage.setVisibility(View.VISIBLE);
    arrowImage.startAnimation(reverseRotateAnimation);

    headerRelativeLayout.setPadding(
        headerRelativeLayout.getPaddingLeft(),
        -1 * HEADER_HEIGHT,
        0,
        headerRelativeLayout.getPaddingBottom());

    SimpleDateFormat format = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss");
    String date = format.format(new Date());
    lastUpdateDateTextView.setText("Last Updated: " + date);

    isLoading = false;
    // isDragging = false;
  }
예제 #10
0
 private void setPreviewColor() {
   if (mView == null) return;
   ImageView iView = new ImageView(getContext());
   LinearLayout widgetFrameView = ((LinearLayout) mView.findViewById(android.R.id.widget_frame));
   if (widgetFrameView == null) return;
   widgetFrameView.setVisibility(View.VISIBLE);
   widgetFrameView.setPadding(
       widgetFrameView.getPaddingLeft(),
       widgetFrameView.getPaddingTop(),
       (int) (mDensity * 8),
       widgetFrameView.getPaddingBottom());
   // remove already create preview image
   int count = widgetFrameView.getChildCount();
   if (count > 0) {
     widgetFrameView.removeViews(0, count);
   }
   widgetFrameView.addView(iView);
   iView.setBackgroundDrawable(new AlphaPatternDrawable((int) (5 * mDensity)));
   iView.setImageBitmap(getPreviewBitmap());
 }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_layout_animation);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    rootContainer = (LinearLayout) findViewById(R.id.root_container);
    //		rootContainer.setOnClickListener(new View.OnClickListener() {
    //			@Override
    //			public void onClick(View v) {
    //				String text = "test view " + (index ++);
    //				TextView textView = new TextView(LayoutAnimationActivity.this);
    //				textView.setId(View.generateViewId());
    //				textView.setText(text);
    //				LinearLayout.LayoutParams layoutParams = new
    // LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
    // ViewGroup.LayoutParams.WRAP_CONTENT);
    //				layoutParams.setMargins(10, 10, 10, 10);
    //				rootContainer.addView(textView);
    //				lastView = textView;
    //			}
    //		});

    fab.setOnClickListener(
        new View.OnClickListener() {
          @Override
          public void onClick(View view) {
            String text = "test view " + (index++);
            TextView textView = new TextView(LayoutAnimationActivity.this);
            textView.setId(View.generateViewId());
            textView.setText(text);
            textView.setAlpha(0f);
            LinearLayout.LayoutParams layoutParams =
                new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            layoutParams.setMargins(10, 10, 10, 10);
            rootContainer.addView(textView);
            lastView = textView;
          }
        });
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    rootContainer.getLayoutTransition().setAnimateParentHierarchy(false);
    ObjectAnimator appearingAnimator1 = new ObjectAnimator();
    appearingAnimator1.setPropertyName("x");
    appearingAnimator1.setFloatValues(rootContainer.getPaddingLeft(), 200);
    appearingAnimator1.setDuration(1000);

    ObjectAnimator appearingAnimator2 = new ObjectAnimator();
    appearingAnimator2.setPropertyName("x");
    appearingAnimator2.setFloatValues(200, rootContainer.getPaddingLeft());
    appearingAnimator2.setDuration(1000);

    ObjectAnimator appearingAnimator3 = new ObjectAnimator();
    appearingAnimator3.setPropertyName("alpha");
    appearingAnimator3.setFloatValues(0f, 1f);
    appearingAnimator3.setDuration(4000);

    AnimatorSet set = new AnimatorSet();
    set.playTogether(appearingAnimator1, appearingAnimator3);
    set.play(appearingAnimator2).after(appearingAnimator1);

    rootContainer.getLayoutTransition().setAnimator(LayoutTransition.APPEARING, set);
  }
예제 #12
0
  public void setupWidget() {
    Log.i(TAG, "Clearing any old widget stuffs");
    // remove all views from the layout
    removeAllViews();

    // unregister our content receiver
    if (mBroadcastReceiver != null) {
      mContext.unregisterReceiver(mBroadcastReceiver);
    }
    // unobserve our content
    if (mObserver != null) {
      mObserver.unobserve();
    }

    // clear the button instances
    PowerButton.unloadAllButtons();

    Log.i(TAG, "Setting up widget");

    String buttons =
        Settings.System.getString(mContext.getContentResolver(), Settings.System.WIDGET_BUTTONS);
    if (buttons == null) {
      Log.i(TAG, "Default buttons being loaded");
      buttons = BUTTONS_DEFAULT;
      // Add the WiMAX button if it's supported
      /* TODO: Fix after WiMax Fixed
      if (WimaxHelper.isWimaxSupported(mContext)) {
          buttons += BUTTON_DELIMITER + PowerButton.BUTTON_WIMAX;
      }
      */
    }
    Log.i(TAG, "Button list: " + buttons);

    // create a linearlayout to hold our buttons
    LinearLayout ll = new LinearLayout(mContext);
    ll.setOrientation(LinearLayout.HORIZONTAL);
    ll.setGravity(Gravity.CENTER_HORIZONTAL);

    int buttonCount = 0;
    for (String button : buttons.split("\\|")) {
      Log.i(TAG, "Setting up button: " + button);
      // inflate our button, we don't add it to a parent and don't do any layout shit yet
      View buttonView = mInflater.inflate(R.layout.power_widget_button, null, false);

      if (PowerButton.loadButton(button, buttonView)) {
        // add the button here
        ll.addView(buttonView, BUTTON_LAYOUT_PARAMS);
        buttonCount++;
      } else {
        Log.e(TAG, "Error setting up button: " + button);
      }
    }

    // we determine if we're using a horizontal scroll view based on a threshold of button counts
    if (buttonCount > LAYOUT_SCROLL_BUTTON_THRESHOLD) {
      // we need our horizontal scroll view to wrap the linear layout
      mScrollView = new HorizontalScrollView(mContext);
      // make the fading edge the size of a button (makes it more noticible that we can scroll
      mScrollView.setFadingEdgeLength(
          mContext.getResources().getDisplayMetrics().widthPixels / LAYOUT_SCROLL_BUTTON_THRESHOLD);
      mScrollView.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
      mScrollView.setOverScrollMode(View.OVER_SCROLL_NEVER);
      // set the padding on the linear layout to the size of our scrollbar, so we don't have them
      // overlap
      ll.setPadding(
          ll.getPaddingLeft(),
          ll.getPaddingTop(),
          ll.getPaddingRight(),
          mScrollView.getVerticalScrollbarWidth());
      mScrollView.addView(ll, WIDGET_LAYOUT_PARAMS);
      updateScrollbar();
      addView(mScrollView, WIDGET_LAYOUT_PARAMS);
    } else {
      // not needed, just add the linear layout
      addView(ll, WIDGET_LAYOUT_PARAMS);
    }

    // set up a broadcast receiver for our intents, based off of what our power buttons have been
    // loaded
    setupBroadcastReceiver();
    IntentFilter filter = PowerButton.getAllBroadcastIntentFilters();
    // we add this so we can update views and such if the settings for our widget change
    filter.addAction(Settings.SETTINGS_CHANGED);
    // we need to detect orientation changes and update the static button width value appropriately
    filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
    // register the receiver
    mContext.registerReceiver(mBroadcastReceiver, filter);
    // register our observer
    if (mObserver != null) {
      mObserver.observe();
    }
  }
  // 当状态改变时候,调用该方法,以更新界�?
  private void changeHeaderViewByState() {
    switch (state) {
      case RELEASE_To_REFRESH:
        arrowImageView.setVisibility(View.VISIBLE);
        progressBar.setVisibility(View.GONE);
        tipsTextview.setVisibility(View.VISIBLE);
        lastUpdatedTextView.setVisibility(View.VISIBLE);

        arrowImageView.clearAnimation();
        arrowImageView.startAnimation(animation);

        tipsTextview.setText(R.string.pull_to_refresh_release_label);

        // Log.v(TAG, "当前状�?,松�?���?);
        break;
      case PULL_To_REFRESH:
        progressBar.setVisibility(View.GONE);
        tipsTextview.setVisibility(View.VISIBLE);
        lastUpdatedTextView.setVisibility(View.VISIBLE);
        arrowImageView.clearAnimation();
        arrowImageView.setVisibility(View.VISIBLE);
        if (isBack) {
          isBack = false;
          arrowImageView.clearAnimation();
          arrowImageView.startAnimation(reverseAnimation);
        }
        tipsTextview.setText(R.string.pull_to_refresh_pull_label);

        // Log.v(TAG, "当前状�?,下拉刷�?);
        break;

      case REFRESHING:
        // System.out.println("刷新REFRESHING-TopPad�?+headContentOriginalTopPadding);
        headView.setPadding(
            headView.getPaddingLeft(),
            headContentOriginalTopPadding,
            headView.getPaddingRight(),
            headView.getPaddingBottom());
        headView.invalidate();

        progressBar.setVisibility(View.VISIBLE);
        arrowImageView.clearAnimation();
        arrowImageView.setVisibility(View.GONE);
        tipsTextview.setText(R.string.pull_to_refresh_refreshing_label);
        lastUpdatedTextView.setVisibility(View.GONE);

        // Log.v(TAG, "当前状�?,正在刷新...");
        break;
      case DONE:
        // System.out.println("完成DONE-TopPad�?+(-1 * headContentHeight));
        headView.setPadding(
            headView.getPaddingLeft(),
            -1 * headContentHeight,
            headView.getPaddingRight(),
            headView.getPaddingBottom());
        headView.invalidate();

        progressBar.setVisibility(View.GONE);
        arrowImageView.clearAnimation();
        // 此处更换图标
        arrowImageView.setImageResource(R.drawable.ic_pulltorefresh_arrow);

        tipsTextview.setText(R.string.pull_to_refresh_pull_label);
        lastUpdatedTextView.setVisibility(View.VISIBLE);

        // Log.v(TAG, "当前状�?,done");
        break;
    }
  }
  public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        if (firstItemIndex == 0 && !isRecored) {
          startY = (int) event.getY();
          isRecored = true;
          // System.out.println("当前-按下高度-ACTION_DOWN-Y�?+startY);
        }
        break;

      case MotionEvent.ACTION_CANCEL: // 失去焦点&取消动作
      case MotionEvent.ACTION_UP:
        if (state != REFRESHING) {
          if (state == DONE) {
            // System.out.println("当前-抬起-ACTION_UP:DONE�?��都不�?);
          } else if (state == PULL_To_REFRESH) {
            state = DONE;
            changeHeaderViewByState();
            // System.out.println("当前-抬起-ACTION_UP:PULL_To_REFRESH-->DONE-由下拉刷新状态到刷新完成状�?");
          } else if (state == RELEASE_To_REFRESH) {
            state = REFRESHING;
            changeHeaderViewByState();
            onRefresh();
            // System.out.println("当前-抬起-ACTION_UP:RELEASE_To_REFRESH-->REFRESHING-由松�?��新状态,到刷新完成状�?);
          }
        }

        isRecored = false;
        isBack = false;

        break;

      case MotionEvent.ACTION_MOVE:
        int tempY = (int) event.getY();
        // System.out.println("当前-滑动-ACTION_MOVE Y�?+tempY);
        if (!isRecored && firstItemIndex == 0) {
          // System.out.println("当前-滑动-记录拖拽时的位置 Y�?+tempY);
          isRecored = true;
          startY = tempY;
        }
        if (state != REFRESHING && isRecored) {
          // 可以松开刷新�?
          if (state == RELEASE_To_REFRESH) {
            // �?��推,推到屏幕足够掩盖head的程度,但还没有全部掩盖
            if ((tempY - startY < headContentHeight + 20) && (tempY - startY) > 0) {
              state = PULL_To_REFRESH;
              changeHeaderViewByState();
              // System.out.println("当前-滑动-ACTION_MOVE:RELEASE_To_REFRESH--》PULL_To_REFRESH-由松�?��新状态转变到下拉刷新状�?");
            }
            // �?��子推到顶
            else if (tempY - startY <= 0) {
              state = DONE;
              changeHeaderViewByState();
              // System.out.println("当前-滑动-ACTION_MOVE:RELEASE_To_REFRESH--》DONE-由松�?��新状态转变到done状�?");
            }
            // �?��拉,或�?还没有上推到屏幕顶部掩盖head
            else {
              // 不用进行特别的操作,只用更新paddingTop的�?就行�?
            }
          }
          // 还没有到达显示松�?��新的时�?,DONE或�?是PULL_To_REFRESH状�?
          else if (state == PULL_To_REFRESH) {
            // 下拉到可以进入RELEASE_TO_REFRESH的状�?
            if (tempY - startY >= headContentHeight + 20
                && currentScrollState == SCROLL_STATE_TOUCH_SCROLL) {
              state = RELEASE_To_REFRESH;
              isBack = true;
              changeHeaderViewByState();
              // System.out.println("当前-滑动-PULL_To_REFRESH--》RELEASE_To_REFRESH-由done或�?下拉刷新状�?转变到松�?���?);
            }
            // 上推到顶�?
            else if (tempY - startY <= 0) {
              state = DONE;
              changeHeaderViewByState();
              // System.out.println("当前-滑动-PULL_To_REFRESH--》DONE-由Done或�?下拉刷新状�?转变到done状�?");
            }
          }
          // done状�?�?
          else if (state == DONE) {
            if (tempY - startY > 0) {
              state = PULL_To_REFRESH;
              changeHeaderViewByState();
              // System.out.println("当前-滑动-DONE--》PULL_To_REFRESH-由done状�?转变到下拉刷新状�?);
            }
          }

          // 更新headView的size
          if (state == PULL_To_REFRESH) {
            int topPadding = (int) ((-1 * headContentHeight + (tempY - startY)));
            headView.setPadding(
                headView.getPaddingLeft(),
                topPadding,
                headView.getPaddingRight(),
                headView.getPaddingBottom());
            headView.invalidate();
            // System.out.println("当前-下拉刷新PULL_To_REFRESH-TopPad�?+topPadding);
          }

          // 更新headView的paddingTop
          if (state == RELEASE_To_REFRESH) {
            int topPadding = (int) ((tempY - startY - headContentHeight));
            headView.setPadding(
                headView.getPaddingLeft(),
                topPadding,
                headView.getPaddingRight(),
                headView.getPaddingBottom());
            headView.invalidate();
            // System.out.println("当前-释放刷新RELEASE_To_REFRESH-TopPad�?+topPadding);
          }
        }
        break;
    }
    return super.onTouchEvent(event);
  }
  @Override
  public boolean onTouchEvent(MotionEvent ev) {
    // TODO Auto-generated method stub
    switch (ev.getAction()) {
      case MotionEvent.ACTION_DOWN:
        // isDragging = true;
        startY = ev.getY();
        if (topRowIndex > 1) {
          showRefreshButton = false;
        } else {
          showRefreshButton = true;
        }
        break;
      case MotionEvent.ACTION_MOVE:
        if (!isLoading && showRefreshButton) {
          deltaY = ev.getY() - startY;

          Log.d("debug", String.valueOf(deltaY));

          headerRelativeLayout.setPadding(
              headerRelativeLayout.getPaddingLeft(),
              -1 * HEADER_HEIGHT + (int) deltaY,
              0,
              headerRelativeLayout.getPaddingBottom());

          if (headerRelativeLayout.getPaddingTop() >= HEADER_HEIGHT
              && currentState == STATE_PULL_TO_REFRESH) {
            // change state
            currentState = STATE_RELEASE_TO_UPDATE;
            arrowImage.clearAnimation();
            arrowImage.startAnimation(rotateAnimation);
            headerTextView.setText(R.string.release_to_refresh);
          } else if (headerRelativeLayout.getPaddingTop() < HEADER_HEIGHT
              && currentState == STATE_RELEASE_TO_UPDATE) {
            currentState = STATE_PULL_TO_REFRESH;
            arrowImage.clearAnimation();
            arrowImage.startAnimation(reverseRotateAnimation);
            headerTextView.setText(R.string.pull_to_refresh);
          }
        }
        break;
      case MotionEvent.ACTION_UP:
        // isDragging = false;

        if (!isLoading && showRefreshButton) {
          if (headerRelativeLayout.getPaddingTop() < HEADER_HEIGHT) {
            // come back
            headerRelativeLayout.setPadding(
                headerRelativeLayout.getPaddingLeft(),
                -1 * HEADER_HEIGHT,
                0,
                headerRelativeLayout.getPaddingBottom());
          } else {
            // come to HEADER_HEIGHT and start the trigger
            headerRelativeLayout.setPadding(
                headerRelativeLayout.getPaddingLeft(),
                HEADER_TOP,
                0,
                headerRelativeLayout.getPaddingBottom());
            headerTextView.setText(R.string.loading);
            progressBar.setVisibility(View.VISIBLE);
            arrowImage.clearAnimation();
            arrowImage.setVisibility(View.GONE);

            // START LOADING
            isLoading = true;
            if (refreshDelegate != null) {
              refreshDelegate.startFresh();
            }
          }
        }
        break;
      default:
        break;
    }

    return super.onTouchEvent(ev);
  }
예제 #16
0
  @Override
  public boolean onTouchEvent(MotionEvent ev) {

    switch (ev.getAction()) {
      case MotionEvent.ACTION_DOWN:
        mDownY = ev.getY();
        break;

      case MotionEvent.ACTION_MOVE:
        mMoveY = ev.getY();
        if (mCurrScrollState == ENTER_PULL_REFRESH && mMoveY - mDownY > 0) {
          if (((mMoveY - mDownY) / 4) < 111) {
            mHeaderLinearLayout.setPadding(
                mHeaderLinearLayout.getPaddingLeft(),
                (int) ((mMoveY - mDownY) / 4),
                mHeaderLinearLayout.getPaddingRight(),
                mHeaderLinearLayout.getPaddingBottom());
          } else {
            mHeaderLinearLayout.setPadding(
                mHeaderLinearLayout.getPaddingLeft(),
                111,
                mHeaderLinearLayout.getPaddingRight(),
                mHeaderLinearLayout.getPaddingBottom());
          }
        } else {
          mCurrScrollState = NONE_PULL_REFRESH;
        }
        break;

      case MotionEvent.ACTION_UP:
        // when you action up, it will do these:
        // 1. roll back util header topPadding is 0
        // 2. hide the header by setSelection(1)
        if (mCurrScrollState == OVER_PULL_REFRESH || mCurrScrollState == ENTER_PULL_REFRESH) {
          new Thread(
                  new Runnable() {
                    @Override
                    public void run() {
                      Message _msg;
                      while (mHeaderLinearLayout.getPaddingTop() > 1) {
                        _msg = mHandler.obtainMessage();
                        _msg.what = REFRESH_BACKING;
                        _msg.sendToTarget();
                        try {
                          Thread.sleep(10);
                        } catch (InterruptedException e) {
                          e.printStackTrace();
                        }
                      }
                      _msg = mHandler.obtainMessage();
                      if (mPullRefreshState == OVER_PULL_REFRESH) {
                        _msg.what = REFRESH_BACED;
                      } else {
                        _msg.what = REFRESH_RETURN;
                      }
                      _msg.sendToTarget();
                    }
                  })
              .start();
        }
        break;
    }
    return super.onTouchEvent(ev);
  }