IOS常见视图有一个弹性回退的动画效果,Android 从2.3开始实现了下冲到底部和上冲到底部时颜色渐变动画效果。View类有两个很重要的方法scrollTo和scrollBy,允许移动视图的可见区域。这就是我们今天实现动画效果的理论基础,我们可以在android数据列表顶部往下拖动列表或底部拖动相应的移动数据列表,当停止拖动时再让它弹回去。下面是代码部分:

package com.linghu;  import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.ListView; public class Pull_ListView extends ListView implements Runnable {     private float mLastDownY = 0f;     private int mDistance = 0;     private int mStep = 10;     private boolean mPositive = false;      public Pull_ListView (Context context, AttributeSet attrs) {           super(context, attrs);     }      public Pull_ListView (Context context, AttributeSet attrs, int defStyle) {           super(context, attrs, defStyle);     }      public Pull_ListView (Context context) {           super(context);     }      @Override     public boolean onTouchEvent(MotionEvent event) {          switch (event.getAction()) {               case MotionEvent.ACTION_DOWN:                    if (mLastDownY == 0f && mDistance == 0) {                          mLastDownY = event.getY();                    return true;               }               break;      case MotionEvent.ACTION_CANCEL:            break;    case MotionEvent.ACTION_UP:           if (mDistance != 0) {            mStep = 1;            mPositive = (mDistance >= 0);            this.post(this);            return true;         }         mLastDownY = 0f;         mDistance = 0;         break;      case MotionEvent.ACTION_MOVE:         if (mLastDownY != 0f) {               mDistance = (int) (mLastDownY - event.getY());               if ((mDistance < 0 && getFirstVisiblePosition() == 0 && getChildAt(0).getTop() == 0) || (mDistance > 0 && getLastVisiblePosition() == getCount() - 1)) {                    mDistance /= 2;                    scrollTo(0, mDistance);                    return true;                }         }         mDistance = 0;         break;         }         return super.onTouchEvent(event);     }      @Override     public void run() {           mDistance += mDistance > 0 ? -mStep : mStep;           scrollTo(0, mDistance);           if ((mPositive && mDistance <= 0) || (!mPositive && mDistance >= 0)) {                 scrollTo(0, 0);                 mDistance = 0;                 mLastDownY = 0f;                 return;            }           mStep += 1;           this.postDelayed(this, 10);      } } // end class 


更多相关文章

  1. 样式表以及Color.xml文件『Android系列六』
  2. Android添加全屏启动画面
  3. Android实现多个跑马灯效果,多个文本框TextView的跑马灯
  4. Android修改开机Logo和开机动画
  5. Android控件——ViewFlipper的使用,垂直滚动广告条
  6. popupwindow练习
  7. Android中TextView首行缩进处理办法
  8. Android——详解Paint的setPathEffect(PathEffect effect)
  9. 一个Android工程师的学习实践之路

随机推荐

  1. android 音效
  2. android添加各种权限整理
  3. 【OOM】Android加载大图片OOM异常解决
  4. Android Fragment页打开相册
  5. net :: ERR_CLEARTEXT_NOT_PERMITTED
  6. checkbox style
  7. 【Android】详解Android动画之Interpolat
  8. 完成android的manven项目管理
  9. Android - 解决onSaveInstanceState的Bug
  10. 常用Android系统调用