Android View的滑动

scrollTo/scrollBy

mScrollX:View左边缘和View内容左边缘在水平方向上的距离。

mScrollY.View上边缘和View内容上边缘在竖直方向上的距离。

scrollTo和scrollBy只能改变View内容的位置而不能改变View在布局中的位置。

单位:像素。

动画

使用动画来移动View,主要是操作View的translationX和translationY属性。

View Animation(Tween Animation) 补间动画
Drawable Animation(Frame Animation) 逐帧动画
Property Animation 属性动画

补间动画

间动画,给出两个关键帧,通过一些算法将给定属性值在给定的时间内在两个关键帧间渐变,只能应用于View对象,而且只支持支持旋转、渐变、移动、缩放属性,而不支持背景颜色的改变。而且只是改变了View对象绘制的位置,而没有改变View对象本身.

View动画并不能真正改变View的位置,变换后的View并不会响应点击事件。属性动画可以解决上述问题。但属性动画从Android3.0后才能使用,无法兼容到Android2.2.

Tween Animation实现的效果

1. Alpha :淡入淡出效果
2. Scale :缩放效果
3. Rotate :旋转效果
4. Translate :移动 效果

Tween Animation的通用方法

1. setDuration (long durationMills ) 动画持续时间(单位:毫秒)
2. setFillAfter (Boolean fillAfter ) 如果 fillAfter 的值为 true, 则动画执行后,控件将停留在执行结束的状态
3. setFillBefore (Boolean fillBefore ) 如果 fillBefore 的值为 true ,则动画执行后,控件将回到动画执行之前的状态
4. setStartOffSet (long startOffSet ) 设置动画执行之前的等待时间
5. setRepeatCount ( int repeatCount ) 设置动画重复执行的 次数

Animation的四个子类:AlphaAnimationTranslateAnimationScaleAnimationRotateAnimation

属性动画

ObjectAnimator.ofFloat(targetView, "translationX", 0 , 100).setDuration(100).start();

改变布局参数

ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mButtonToShow.getLayoutParams();
params.width += 100;
params.leftMargin += 100;
mButtonToShow.requestLayout();
//mButtonToShow.setLayoutParams(params);

弹性滑动的三种实现方式

Scroller实现

mSroller = new Scroller(context);
mSroller.startScroll(getScrollX(),getScrollY(),dx,dy);
invalidate();

@Override
public void computeScroll() {
    if(mSroller.computeScrollOffset()){
        scrollTo(mSroller.getCurrX(),mSroller.getCurrY());
        postInvalidate();
    }
}

invalidate() draw() computerScroll() 循环调用,实现动画的完成。
在方法computeScroll()中,计算了当前的scrollX,scrollY,返回值为true时,表示动画没有完成,继续下一次绘制。

动画实现

属性动画实现View弹性滑动

ObjectAnimator.ofFloat(targetView, "translationX", 0, 100).setDuration(100),start();

另一种形式

final int startX = 0;

final int deltaX = 0;

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

animator.addUpdateListener(new AnimatorUpdateListener(){

   @Override

   public void onAnimatorUpdate(ValueAnimator animator){

       float fraction = animator.getAnimatedFraction();

      mButton1.scrollTo(startX + (int) (deltaX * fraction) , 0);//此处可以实现以时间为参数进行变化的复杂动画。

   }

});

延时策略实现

使用Handler或View的postDelayed方法,也可以使用线程的sleep方法,发送一系列延时消息从而达到一种渐近式的效果。




1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值