效果图如下:

android 可滑动的View_第1张图片


方法一(实现原理,主要依靠移动动画),主要代码如下:


private OnTouchListener gonggaoOnTouch() {        return new OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                // TODO Auto-generated method stub                switch (event.getAction()) {                case MotionEvent.ACTION_DOWN: {                    break;                }                case MotionEvent.ACTION_UP: {                    if (mAdsV.getTop() == mSlipRl.getTop() && moveY < 0) {                        topTag();                    } else if (moveY < -200) {                        topTag();                    } else {                        nextTag();                    }                    break;                }                }                gestureDetector.onTouchEvent(event);                return true;            }            private void topTag() {                animBuilder.setDurationMillis(400).setFromYValue(formY)                        .setToYValue(mAdsV.getTop() - mSlipRl.getTop());                bgMoveAnim = animBuilder.build();                bgMoveAnim.setAnimationListener(new AnimationListener() {                    @Override                    public void onAnimationStart(Animation animation) {                        // TODO Auto-generated method stub                    }                    @Override                    public void onAnimationRepeat(Animation animation) {                        // TODO Auto-generated method stub                    }                    @Override                    public void onAnimationEnd(Animation animation) {                        // TODO Auto-generated method stub                        mSlipRl.clearAnimation();                        setLayout(mSlipRl, 0, mAdsV.getTop(), 0);                        mSlipRl.invalidate();                    }                });                mSlipRl.startAnimation(bgMoveAnim);            }            private void nextTag() {                animBuilder.setDurationMillis(400).setFromYValue(formY)                        .setToYValue(mAdsV.getBottom() - mSlipRl.getTop());                bgMoveAnim = animBuilder.build();                bgMoveAnim.setAnimationListener(new AnimationListener() {                    @Override                    public void onAnimationStart(Animation animation) {                        // TODO Auto-generated method stub                    }                    @Override                    public void onAnimationRepeat(Animation animation) {                        // TODO Auto-generated method stub                    }                    @Override                    public void onAnimationEnd(Animation animation) {                        // TODO Auto-generated method stub                        mSlipRl.clearAnimation();                        setLayout(mSlipRl, 0, mAdsV.getBottom(), 0);                        mSlipRl.invalidate();                    }                });                mSlipRl.startAnimation(bgMoveAnim);            }        };    }


方法二,主要代码如下:


@Override    public boolean dispatchTouchEvent(MotionEvent event) {        // TODO Auto-generated method stub        switch (event.getAction()) {        case MotionEvent.ACTION_DOWN:            lastY = event.getY();            if(null==mLocationSlip||null==mSlipDown||null==mSlipMove){                mLocationSlip = this.findViewById(R.id.location_slip);                mSlipDown = this.findViewById(R.id.down_slip);                mSlipMove = this.findViewById(R.id.move_slip);            }            top = mSlipMove.getTop();            bottom = mSlipDown.getBottom();            if (top <= lastY && lastY <= (bottom + top)) {                isMove = true;                return true;            }        case MotionEvent.ACTION_MOVE:            if (isMove) {                float newY = event.getY();                int ay = (int) ((lastY - newY) * 0.5);                lastY = newY;                mSlipMove.offsetTopAndBottom(-ay);            }            break;        case MotionEvent.ACTION_UP:            if (isMove) {                isMove = false;                top = mSlipMove.getTop();                System.out.println(top + "====" + bottom + "==="+ mLocationSlip.getBottom()*2/3);                if(!location&&top<(mLocationSlip.getBottom()*2/3)){                    setLayout(mSlipMove, 0, 0, 0);                    location=true;                }else if(location&&top>(mLocationSlip.getBottom()*1/3)){                    setLayout(mSlipMove, 0, mLocationSlip.getBottom(), 0);                    location=false;                }else if(!location){                    setLayout(mSlipMove, 0, mLocationSlip.getBottom(), 0);                }else{                    setLayout(mSlipMove, 0, 0, 0);                }            }            break;        }        return super.dispatchTouchEvent(event);    }



主要知识点,就是重新设置了View的位置,android 3.0之后View可以同setTop(),setLeft()等一系列方法直接设置位置方便了开发。3.0之前位置变化设置方法:


/**     * 给view重置位置     * @param view     * @param x     * @param y     * @param b     */    public void setLayout(View view, int x, int y, int b) {        MarginLayoutParams margin = new MarginLayoutParams(                view.getLayoutParams());        margin.setMargins(x, y, 0, b);        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(                margin);        view.setLayoutParams(layoutParams);    }


文章涉及知识点不多,相信一看就懂。如有问题,留言


下载移步:可滑动的View




更多相关文章

  1. 全志A64 Android7.1屏蔽使用按键进入安全模式的方法
  2. Android使用AttributeSet自定义控件的方法
  3. 让Android不播放关机动画,而是显示一个关机进度条的方法
  4. android下拉菜单spinner的使用方法
  5. Android第五期 - 更新自己的apk本地与网络两种方法
  6. Android HandlerThread使用方法
  7. android-2.2以下杀进程方法:restartPackage();
  8. android studio调整默认的debug.keystore位置。
  9. 【Android 开发】:UI控件之拖动条控件 SeekBar的使用方法

随机推荐

  1. android文件存储的五种方式简介
  2. Android(安卓)Studio 设备模拟器(virtual
  3. Android(安卓)Service组件的生命周期及用
  4. Android开发中的问题集锦
  5. Android(安卓)实现通知栏显示多个notific
  6. android 自动查找控件id
  7. Android软键盘一些处理
  8. Launcher 安装APK快捷方式出现在末尾空白
  9. Android(安卓)- 判断当前网络环境、隐藏
  10. 移动架构39_RxAndroid二(变换调用:map、fla