自定义View三

弹性滑动布局ElasticText


思路

  • 初始化Scroller类,然后在OnTouchEvent里判断按下和抬起事件

    • 按下时,利用startScroll方法让它上弹
    • 松开时,同样用startScroll方法让它滑下

      因为getScrollX()或者getScrollY()方法都是得到控件随时随地的x,y坐标.所以滚动时如果直接像下面这样写就会报错
      `

      mScroller.startScroll(getScrollX(), getScrollY(), 0, 200, 1000);
      mScroller.startScroll(getScrollX(), getScrollY(), 0, -200, 1000);`

  • 当你调用startScroll开始滑动时,invalidate();
    然后它会调用draw()方法,触发computeScroll()方法,我们在此方法内判断,如果动画没结束,就滑动咯
    `

     @Override
        public void computeScroll() {
        if(mScroller.computeScrollOffset()){//返回true 表示动画还没有结束
            scrollTo(mScroller.getCurrX(),mScroller.getCurrY());
            postInvalidate();
         }
        super.computeScroll();
        }
    

    `

  • 写一个smotthScrollTo方法让文字向上偏移多少,up动作时就向下偏移多少
    `

    private void smoothScrollTo(int destX, int destY) {
            int scrollX = getScrollX();
            int detlaX = destX - scrollX;
            int scrollY = getScrollY();
            System.out.println(getScaleY()+"======");
            int detlaY = destY - scrollY;
            mScroller.startScroll(scrollX,scrollY,detlaX,detlaY,1000);
     }  
    

    `

    • 注意:startScroll()方法里第三四个参数是指偏移量,具体可看源代码
    • 最后 用这两行代码替代在上述第一点中的那两行代码
      `

      smoothScrollTo(0,200);
      smoothScrollTo(0,0);
      

      `

      • x轴坐标一直是不变的,y轴是滚动了多少就回滚多少

      • getScrollX()坐标为0,不管在哪,首先都以它的初始状态下left为起点getScrollX(),向左就为夫的,向右即为正的

  • 最后附上布局
    `

            <?xml version="1.0" encoding="utf-8"?>
            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:orientation="vertical"
                android:gravity="center"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                <custom.ElasticText
                android:text="Spark"
                android:textSize="34sp"
                android:gravity="center"
                android:layout_width="wrap_content"
                android:layout_height="match_parent" />
            </LinearLayout>`
    

    效果图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值