android 弹性动画,Android 弹性滑动--Scroller/动画/

1.通过Scroller

Sroller本身并不能实现View的滑动,它需要配合View的computeScroll方法才能完成弹性滑动的效果,它不断地让View重绘,而每一次重绘距滑动起始时间有一个时间间隔,通过这个时间间隔Scroller就可以得出View当前的滑动位置,知道了滑动位置就可以通过scrollTo方法来完成View的滑动。就这样,View的每一次重绘都会导致View进行小幅度的滑动,而多次的小幅度滑动就组成了弹性滑动这就是Scroller的工作机制。

2.通过动画

final int startX = 0;

final int startY = 0;

ValueAnimator animator =

ValueAnimator.ofInt(0,1).setDuration(1000);

animator.addUpdateListener(new

AnimatorUpdateListener(){

@override

public void

onAnimationUpdate(ValueAnimator animator){

float fraction

=animator.getAnimatedFraction();

mButton1.scrollTo(startX + (int)

(deltaX * fraction),0);

}

})

animator.start();

注意,以上的滑动针对的是View的内容而非View本身。

3.使用延时策略

它的核心思想是通过发送一系列延时消息从而达到一种渐进式的效果,具体来说可以使用Handler或View的postDelayed方法,也可以使用线程的sleep方法。对于postDelayed方法来说,我们可以通过它来延时发送一个消息,然后在消息中来进行View的滑动,如果接连不断地发送这种延时消息,那么就可以实现弹性滑动的效果。对于sleep方法来说,通过while循环中不断地滑动View和sleep就可以实现弹性滑动地效果。

下面采用Handler来做个示例。

private static final int

MESSAGE_SCROLL_TO=1;

private static final int

FRAME_COUNT=30;

private static final int

DELAYED_TIME=33;

private int mCount =0;

@SuppressLint("HandlerLeak")

private Handler mHandler= new

Handler(){

public void handlerMessage(Message

msg){

switch(msg.what){

case MESSAGE_SCROLL_TO:

mCount++;

if(mCount <=FRAME_COUNT){

float fraction =mCount / (float)

FRAME_COUNT;

int scrollX = (int)(fraction *

100);

mButton1.scrollTo(scrollX , 0);

mHandler.sendEmptyMessageDelayed(MESSAGE_SCROLL_TO,DELAYED_TIME);

}

break;

}

};

};

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值