在开发过程时,View中需要上下阻尼效果,有网上有很多,直接上代码。

package com.android.feature;import android.content.Context;import android.graphics.Rect;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.view.animation.TranslateAnimation;import android.widget.ScrollView;/** * Created by yuanjl */public class VerticalDampenScrollView extends ScrollView {    // Drag the size of the size = 4 only allows to drag the screen 1/4    private static final int size = 4;    private View inner;    private float y;    private Rect normal = new Rect();    private boolean next = false;    public interface ScrollViewChangeListener {        void onScrollChanged(VerticalDampenScrollView scrollView, int x, int y,                             int oldx, int oldy);    }    private ScrollViewChangeListener changeListener = null;    public void setChangeListener(ScrollViewChangeListener changeListener) {        this.changeListener = changeListener;    }    public interface ScrollViewListener {        void isBottom(boolean isbottom);    }    private ScrollViewListener scrollViewListener = null;    public void setScrollViewListener(ScrollViewListener scrollViewListener) {        this.scrollViewListener = scrollViewListener;    }    public VerticalDampenScrollView(Context context) {        super(context);    }    public VerticalDampenScrollView(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onFinishInflate() {        if (getChildCount() > 0) {            inner = getChildAt(0);        }    }    @Override    public boolean onTouchEvent(MotionEvent ev) {        if (inner == null) {            return super.onTouchEvent(ev);        } else {            commOnTouchEvent(ev);        }        return super.onTouchEvent(ev);    }    public void commOnTouchEvent(MotionEvent ev) {        int action = ev.getAction();        switch (action) {            case MotionEvent.ACTION_DOWN:                next = false;                y = ev.getY();                break;            case MotionEvent.ACTION_UP:                if (isNeedAnimation()) {                    // Log.v("yuanjl", "will up and animation");                    animation();                    if (scrollViewListener != null) {                        scrollViewListener.isBottom(next);                    }                }                break;            case MotionEvent.ACTION_MOVE:                final float preY = y;                float nowY = ev.getY();                /**                 * Size = 4 indicates that the distance to the drag is 1/4 of the height of the screen                 */                int deltaY = (int) (preY - nowY) / size;                // scroll                // scrollBy(0, deltaY);                y = nowY;                // When the scroll to the top or the most when it will not scroll, then move the layout.                if (isNeedMove()) {                    if (normal.isEmpty()) {                        // Save the normal layout position                        normal.set(inner.getLeft(), inner.getTop(),                                inner.getRight(), inner.getBottom());                        return;                    }                    int yy = inner.getTop() - deltaY;                    if (yy < -100) {                        next = true;                    } else {                        next = false;                    }                    // Move the layout                    inner.layout(inner.getLeft(), yy, inner.getRight(),                            inner.getBottom() - deltaY);                }                break;            default:                break;        }    }    // Turn on animation to move    public void animation() {        TranslateAnimation ta = new TranslateAnimation(0, 0, inner.getTop(),                normal.top);        ta.setDuration(200);        inner.startAnimation(ta);        // Set back to the normal layout position        inner.layout(normal.left, normal.top, normal.right, normal.bottom);        normal.setEmpty();    }    // Whether you need to turn on animation    public boolean isNeedAnimation() {        return !normal.isEmpty();    }    // Whether you need to move the layout    public boolean isNeedMove() {        int offset = inner.getMeasuredHeight() - getHeight();        int scrollY = getScrollY();        if (scrollY == 0 || scrollY == offset) {            return true;        }        return false;    }    @Override    protected void onScrollChanged(int x, int y, int oldx, int oldy) {        super.onScrollChanged(x, y, oldx, oldy);        if (changeListener != null) {            changeListener.onScrollChanged(this, x, y, oldx, oldy);        }    }}

android 水平方左右向滑动阻尼效果http://blog.csdn.net/

更多相关文章

  1. Android实现图片倒影效果
  2. android动画效果_图片闪烁
  3. Android实现点击按钮 文本框值加1
  4. Android实现Flip翻转动画效果
  5. Android(安卓)Animation Tween动画效果的使用
  6. android 各种高级素材使用
  7. Android(安卓)gallery实现二级联动效果
  8. android控件之spinner (下拉列表)
  9. Android(安卓)Activity界面切换添加动画特效

随机推荐

  1. Android(安卓)LCD(二):LCD常用接口原理篇
  2. Android微信支付开发流程
  3. Android的UI显示原理之Surface的创建
  4. Android(安卓)Overlay机制
  5. Android(安卓)地理编码&逆地理编码(百度、
  6. Android(安卓)Studio "nativeLibraryDire
  7. jQuery 判断iPad、iPhone、Android是横屏
  8. 搭建andorid开发环境
  9. Windows下安装 Android(安卓)Studio
  10. 如何把批量数据导入到android 的 sqlite