zoukankan      html  css  js  c++  java
  • Scroller 实现的弹性回弹的LinearLayout

    由于公司业务发展,多app需求很少,被调到java后台开发接口三个月了,还要我继续做 java,最近有点想换工作,不得不重新看看基础知识了。

    晚上看到了滑动的实现方式,平滑滑package com.example.alter.scrollers.scroller;

    
    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.GestureDetector;
    import android.view.MotionEvent;
    import android.widget.LinearLayout;
    import android.widget.Scroller;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * Created by alter on 16/4/18.
     */
    public class ScrollLinearLayout extends LinearLayout {
        Logger logger = LoggerFactory.getLogger(ScrollLinearLayout.class);
        private Scroller mScroller;
        private GestureDetector gestureDerector;
        public ScrollLinearLayout(Context context) {
            super(context, null);
        }
    
        public ScrollLinearLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
            mScroller = new Scroller(context);
            gestureDerector = new GestureDetector(context, new GestureDetector.OnGestureListener() {
                @Override
                public boolean onDown(MotionEvent e) {
                    return true;
                }
    
                @Override
                public void onShowPress(MotionEvent e) {
    
                }
    
                @Override
                public boolean onSingleTapUp(MotionEvent e) {
                    return false;
                }
    
                @Override
                public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
                    int disY = (int) ((distanceY-0.5)/2);
                    beginScroll(0,disY);
                    return false;
                }
    
                @Override
                public void onLongPress(MotionEvent e) {
    
                }
    
                @Override
                public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                    return false;
                }
            });
        }
    
        private void beginScroll(int dx, int dy) {
            mScroller.startScroll(mScroller.getFinalX(),mScroller.getFinalY(),dx,dy);
            invalidate();
            System.out.println("smoothScrollBy()---> " +
                    "mScroller.getFinalX()="+mScroller.getFinalX()+","+
                    "mScroller.getFinalY()="+mScroller.getFinalY());
        }
    
        private void prepareScroll(int fx, int fy) {
            int dx=fx-mScroller.getFinalX();
            int dy=fy-mScroller.getFinalY();
            beginScroll(dx,dy);
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {switch (event.getAction()){
                case MotionEvent.ACTION_UP:
                    prepareScroll(0,0);
                    break;
                default:
                    return gestureDerector.onTouchEvent(event);
            }
            return super.onTouchEvent(event);
        }
    
        @Override
        public void computeScroll() {
            if (mScroller.computeScrollOffset())
            {
                logger.info("CurX" + mScroller.getCurrX() + "CurY" + mScroller.getCurrY());
    
                scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
                postInvalidate();
            }
            super.computeScroll();
        }
    }

    只实现了垂直方向的回弹效果。

    滑动时,调用手势监听器的滑动;

    手指抬起,调用Scroller滑动到0,0位置,完成回弹效果。

  • 相关阅读:
    人不成熟的六个特征
    qq申请器,有源码,用post提交
    有的公司,在不断创新,我们时刻能感受到
    Java中 堆 栈,常量池等概念解析(转载)
    Jquery获得相同id的元素
    强大Jquery插件,table排序
    和计算机沟通
    千万级架构设计诀窍(zz)(
    强大Jquery插件,table排序之二
    原文作者乔纳森·丹尼可(Jonathan Danylko)是一位自由职业的web架构师和程序员,编程经验已超过20年,涉足领域有电子商务、生物技术、房地产、医疗、保险和公用事业。正如乔纳 森在文中所言,本文适合刚毕业的大学生和刚入门的程序员。如果你已是高级
  • 原文地址:https://www.cnblogs.com/qianyukun/p/5406510.html
Copyright © 2011-2022 走看看