Android弹性滑动
2015-12-18 11:39
525 查看
1、View使用Scroller滑动
/**
*在scroller.startScroll()方法中,会将scrollX和deltaX相加存入mFinalX中
*invalidate()方法会调用draw()方法,draw()会调用computeScroll()方法,而在View
*中computeScroll()方法是空实现,所以要复写该方法,在方法中调用
*scrollTo(scroller.getCurrX(),scroller.getCurrY()),又因为getCurrX()方法返回的是mFinalX
*的值,调用postInvalidate()方法进行第二次重绘实现view的刷新
*/
Scrollerscroller=newScroller(mContext);
privatevoidsmoothScrollTo(intdestX,intdestY){
intscrollX=getScrollX();
intdeltaX=destX-scrollX;
//1000ms内滑向destX,效果就是慢慢滑动
scroller.startScroll(scrollX,0,deltaX,0,1000);
invalidate();
}
@Override
publicvoidcomputeScroll(){
if(scroller.computeScrollOffset()){
scrollTo(scroller.getCurrX(),scroller.getCurrY());
postInvalidate();
}
}
2、使用动画
finalintstartX=0;
finalintdeltaX=100;
finalButtonmButton=newButton(mContext);
ValueAnimatoranimator=ValueAnimator.ofInt(0,1).setDuration(1000);
animator.addUpdateListener(newValueAnimator.AnimatorUpdateListener(){
@Override
publicvoidonAnimationUpdate(ValueAnimatoranimator){
floatfraction=animator.getAnimatedFraction();
mButton.scrollTo(startX+(int)(deltaX*fraction),0);
}
});
animator.start();
3、使用延时加载Handler
privatestaticfinalintMESSAGE_SCROLL_TO=1;
privatestaticfinalintFRAME_COUNT=30;
privatestaticfinalintDELAYED_TIME=33;
privateintmCount=0;
privateButtonmButton;
privateHandlermHandler=newHandler(){
@Override
publicvoidhandleMessage(Messagemsg){
switch(msg.what){
caseMESSAGE_SCROLL_TO:
mCount++;
if(mCount<=FRAME_COUNT){
floatfraction=mCount/(float)FRAME_COUNT;
intscrollX=(int)(fraction*100);
mButton.scrollTo(scrollX,0);
mHandler.sendEmptyMessageDelayed(MESSAGE_SCROLL_TO,DELAYED_TIME);
}
break;
}
}
};
相关文章推荐
- 直接拿来用!最火的Android开源项目(一)
- Android studio No executable code found 断点不可用
- android中自定义view---实现竖直方向的文字功能,文字方向朝上,同时提供接口,判断当前touch的是哪个字符,并改变颜色
- Android studio使用过程中遇到的问题
- Android Call_01_basic
- android usb accessory
- Android Studio 使用 Gradle 打包 Jar
- MAC Android Studio 快捷键
- Android图形图像处理:canvas的save()和restore()函数详解
- 如何删除Android-studio中的整个项目
- 一、初识Android世界
- Android开发-使用自定义View实现loading效果
- 安卓开发学习之018 创建复合控件
- android subclipse subversive
- Android studio中如何使用Ndk(Jni)?
- greenDAO系列2--如何开始
- Android ViewDragHelper完全解析 自定义ViewGroup神器
- android scrollview嵌套listView和gridView的问题。
- Android 5.x Theme 与 ToolBar 实战
- Android 开发笔记——通过 Intent 传递类对象