安卓View滑动之利用动画实现弹性滑动
程序员文章站
2022-05-05 08:47:15
...
背景
昨天用Scroller实现了下弹性滑动,而利用动画,也可以实现类似的效果
步骤
1、创建ValueAnimator,添加updateListener
主要的scroll逻辑是放在updateListener里的,代码如下
final ValueAnimator animator = ValueAnimator.ofInt(0, 1).setDuration(250); // ofInt()里的值一般用来表示动画的起止区间,setDuration()里面的单位是毫秒
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int offsetY, destY;
if (mIsDown) { // 如果是按下
offsetY = mImage1.getScrollY() - 0;
destY = 40;
} else { // 如果是抬起
offsetY = mImage1.getScrollY() - 40;
destY = -40;
}
mImage1.scrollBy(0, destY - offsetY); // 这里scrollBy()就行,滚动一定的偏移量
mImage1.invalidate(); // 重绘
}
});
2、而后给mImage1设置onTouchListener
规定按下往上跳,抬起归位,代码如下
mImage1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (!animator.isStarted() && !animator.isRunning()) {
mIsDown = true;
}
break;
case MotionEvent.ACTION_UP:
if (animator.isStarted() || animator.isRunning()) {
mIsDown = false;
}
break;
}
if (!animator.isStarted() && !animator.isRunning()) { // 要是按的时间长了,可能需要重启动画
animator.start();
}
return true;
}
});
效果
结语
ValueAnimator动画并没有想象地那么复杂,充其量只是一个带有计时功能的控制器罢了,处理view还是得我们自己来
上一篇: 享元模式-Flyweight(转载)
下一篇: 美图秀秀网页在线版怎么修改图片尺寸?