自定义View(四)--自定义ScrollView

原创 2016年08月31日 13:15:19

前言

今天上课太过无聊,就写了个自定义view-ScrollView,比较简单。

这里写图片描述

代码

    public class MyScrollView extends ScrollView {

    // 用来记录位置信息&判断是否需要执行动画
    private Rect rect = new Rect() ;

    // 表示可以拖动屏幕的部分
    private int count = 5 ;

    private int ANIMATION_TIME = 500 ;

    private float startY;

    private float endY;

    private float deltaY;

    private View view;

    public MyScrollView(Context context) {
        this(context,null);
    }

    public MyScrollView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }


    public MyScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        view = getChildAt(0);
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {

        if(view == null ){
            return super.onTouchEvent(ev);
        }else{
            handleEvent(ev);
        }
        return super.onTouchEvent(ev);
    }

    private void handleEvent(MotionEvent ev) {
        switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            startY = ev.getRawY();
            break;

        case MotionEvent.ACTION_MOVE:
            endY = ev.getRawY();
            deltaY = (endY - startY) / count;
            if(rect.isEmpty()){
                //给矩形设置值
                rect.set(view.getLeft(), view.getTop(), view.getRight(), view.getBottom()) ;
                return ;
            }

            //设置移动,将顶部 - 偏移量
            int tt = (int) (view.getTop() - deltaY) ;
            int bb= (int) (view.getBottom()-deltaY);
            view.layout(view.getLeft(), tt, view.getRight(),bb) ;
            //将end赋值给start
            startY = endY ;
            break;
        case MotionEvent.ACTION_UP:
            //判断动画是否需要执行
            if(isNeedAnimation()){//需要动画
                //执行动画
                startAnimation() ;
            }
            break;
        }
    }

    // 开启动画
    private void startAnimation() {
        System.out.println("执行动画");
        TranslateAnimation animation = new TranslateAnimation(0, 0, view.getTop(), rect.top) ;
        animation.setDuration(ANIMATION_TIME) ;
        view.layout(rect.left, rect.top, rect.right, rect.bottom);
        view.startAnimation(animation) ;
        //重置矩形
        rect.setEmpty();
    }

    // 判断动画是否执行
    private boolean isNeedAnimation() {
        return !rect.isEmpty();
    }

}

代码比较简单,注释也已经写清楚了。不上源码了

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android开发-自定义View-AndroidStudio(二)遇到问题,附:ScrollView中文API

转载请注明出处:http://blog.csdn.net/iwanghang/我正在参加CSDN 2016博客之星评选,希望得到您的宝贵一票~http://blog.csdn.net/vote/can...

关于scrollView中嵌套的ListView或者自定义view的焦点滑动问题

我在自定义一个可滚动的时间选择控件的时候遇到 当我滑动自动滚动控件的时候,响应的时scrollview,很纳闷,我明明在自定义view中重写了onTouchEvent方法 @Override pu...

【Android】自定义View EdgeEffect效果 ----ScrollView部分源代码剖析

EdgeEffect 提供了一种方式去画可滑动View组件的过度滑动效果。EdgeEffect的接口不多,只有6个接口。下面我们用ScrollView源码来分析一下如何实现过度滑动的晕影效果. ...

ScrollView 加入自定义画板View( onDraw())后 不显示的解决

ScrollView 加入自定义画板View( onDraw())后  不显示根据

scrollview添加自定义view的滑动显示问题

最近做了一个实战用到自定义view,由于view比屏幕大所以想放到scrollview中,如下程序。发现不显示。于是对scrollview进行了研究。 ...

自定义View控件值ScrollView,监听实现标题由无到有颜色由浅入深

自定义View控件值ScrollView,监听实现标题由无到有颜色由浅入深

ScrollView子View为自定义View时需要注意的几点问题

From:http://blog.csdn.net/caesardadi/article/details/8307449

ScrollView子View为自定义View时需要注意的几点问题

From: http://blog.csdn.net/caesardadi/article/details/8307449          在内容现实不全时,通常的做法是在布局中加入Scrol...
  • fyfcauc
  • fyfcauc
  • 2014年12月09日 11:36
  • 336

ScrollView子View为自定义View时需要注意的几点问题

在内容现实不全时,通常的做法是在布局中加入ScrollView,使其可以滚定显示。          在使用ScrollView时需要注意以下几点: 1. ScrollView要求其只有一...

自定义View(四)

  • 2017年06月01日 22:42
  • 21.28MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义View(四)--自定义ScrollView
举报原因:
原因补充:

(最多只允许输入30个字)