零散的记录

零散的记录

    • View.setEnable()
    • Scroller
    • 关于属性动画,改变View长款

View.setEnable()

1、当View是不可用的时候,通过setOnTouchListener设置的OnTouchListener中的onTouch方法将不会执行。

2、当View是不可用的时候,onTouchEvent会被执行,但不会执行实质的逻辑,比如onClick、onLongClick等方法不会被执行到。此时onTouchEvent的返回值由该View能不能点
击(包括长按和短按等点击状态)来决定。可以点击时返回true,否则返回false。

3、当View是不可点击的时候,除非调用过View的setTouchDelegate方法传入 mTouchDelegate,否则onTouchEvent必定会返回false,具体的逻辑,例如onClick、onLongClick等不会被调用。

原文:https://blog.csdn.net/weixin_37077539/article/details/54895485

Scroller

1、用来进行平滑滚动的控件,与computeScroll()方法配合使用,同时需要使用invalidate()来使computeScroll()得到执行。
2、过程:
首先需要创建一个Scroller,像下面这样:

Scroller mScroller = new Scroller(context);

我们往往在自定义View里面使用它,所以也在View的构造函数里面初始化它。

然后在想要开始平滑混动的时候调用startScroll,像下面这样:

mScroller.startScroll(startX,startY,dx,dy,duration);
invalidate();

startX和startY表示滑动开始的位置,dx和dy表示滑动的距离,duration表示滑动持续的时间,最后别忘记调用invalidate(),否则你可能不会看到想要的滑动效果。

最后编写computeScroll(),这个方法是属于View类的,我们需要在里面编写平滑滚动的逻辑,通常像这样:

void computeScroll() {
    if (mScroller.computeScrollOffset()) {
      mView.scrollTo(mScroller.currX,mScroller.currY)
      invalidate();
    }
  }

调用computeScrollOffset()方法,将会根据之前提到的startX和dx,startY和dy来更新mScroller里面的currX和currY值,实际上,它完成的工作就是根据起点、终点和时间,计算出在当前时刻view所在的位置,然后再通过
scrollTo方法将view滚动到这个位置,通过周期性的调用,就会产生平滑滚动的效果。其返回值表明了这次平滑滚动是否完成。

实际上平滑滚动都通过周期性更改view的位置来实现。

关于属性动画,改变View长款

1、使用ValueAnimator给View重新设置LayoutParam。
2、一定要使用对应的ofXXX方法,否则会导致动画没有效果
3、例如:将View从100%宽度,缩小到10%宽度,缩小的中心是View的width/3位置,可以通过 设置LayoutParam来控制长度(右侧位置),通过translationX控制左侧位置。


你可能感兴趣的:(android,零散的记录)