Android自定义View你所要知道的(三):View滑动实现方式
2017-06-09 16:28
615 查看
滑动,让用户体验更加友好。与用户交互时让整个界面都多了一分灵性。这篇文章从View滑动三种的实现方式,来做简要的分析。
scrollTo和scrollBy都是View自带的滑动方法,scollBy方法中调用的也是scrollTo方法。此种方式是对View内容进行滑动,并没有改变View的位置。源码:
scollTo方法中根据此次传入的x,y值和上次保存的x,y值做比较,来判断出用户是否滑动。再赋值,调用相关方法,实现滑动。
scollTo和scollBy方法都是传入x,y值,区别在于scrollTo是滑动到那儿去。而scollby则是滑动多少就是多少。下图所示:
图片比较清晰明了,从A滑动到C位置。分2次滑动。滑动到b的时,参数都一样,从B滑动到C的时候。scrollTo的x值是A到C的总共距离。这就很好理解scrollTo方法这样命名的原因了。下面我们通过代码来实现下:
代码相当简单,TestView是一个自定义View中画了一个小矩形,来看下效果图:
将改scrollBy为scrollTo* (-(400),0)后效果
意料之中,滑动400后再滑动就没用了。
前面说到过这两种方式是滑动view的内容,什么意思内。上面滑动的小矩形是TestView中画的一个矩形,所以调用TestView的滑动方法,实际上滑动的是他的内容,即小矩形。
如果是一个Button,滑动的则是他的文字。
上面是一个大的Button,点击滑动调用他的滑动方法,最终滑动的是他的内容文本”被滑动按钮”,如果没有内容就不会产生滑动。
实现效果:
最终的实现效果:
还可以直接调用view的layout方法:
最终的效果都是一样的。
除开之外还有offsetLeftAndRight(int offset)和offsetTopAndBottom(int offset),来修改布局的偏移量,用得比较少提示下就行了。
三种滑动方式总结就先到这儿了。属性动画推荐郭霖大神的三篇文章:
Android属性动画完全解析(上),初识属性动画的基本用法
Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
一丶scrollTo/scrollBy
scrollTo和scrollBy都是View自带的滑动方法,scollBy方法中调用的也是scrollTo方法。此种方式是对View内容进行滑动,并没有改变View的位置。源码:public void scrollTo(int x, int y) { if (mScrollX != x || mScrollY != y) { int oldX = mScrollX; int oldY = mScrollY; mScrollX = x; mScrollY = y; invalidateParentCaches(); onScrollChanged(mScrollX, mScrollY, oldX, oldY); if (!awakenScrollBars()) { postInvalidateOnAnimation(); } } } public void scrollBy(int x, int y) { scrollTo(mScrollX + x, mScrollY + y); }
scollTo方法中根据此次传入的x,y值和上次保存的x,y值做比较,来判断出用户是否滑动。再赋值,调用相关方法,实现滑动。
scollTo和scollBy方法都是传入x,y值,区别在于scrollTo是滑动到那儿去。而scollby则是滑动多少就是多少。下图所示:
图片比较清晰明了,从A滑动到C位置。分2次滑动。滑动到b的时,参数都一样,从B滑动到C的时候。scrollTo的x值是A到C的总共距离。这就很好理解scrollTo方法这样命名的原因了。下面我们通过代码来实现下:
private TestView view = null; private Button button =null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); view = (TestView)findViewById(R.id.tv_scroll); button = (Button) findViewById(R.id.btn_start); button.setOnClickListener(this); } @Override public void onClick(View v) { view.scrollBy(-(400),0); } }
代码相当简单,TestView是一个自定义View中画了一个小矩形,来看下效果图:
将改scrollBy为scrollTo* (-(400),0)后效果
意料之中,滑动400后再滑动就没用了。
前面说到过这两种方式是滑动view的内容,什么意思内。上面滑动的小矩形是TestView中画的一个矩形,所以调用TestView的滑动方法,实际上滑动的是他的内容,即小矩形。
如果是一个Button,滑动的则是他的文字。
上面是一个大的Button,点击滑动调用他的滑动方法,最终滑动的是他的内容文本”被滑动按钮”,如果没有内容就不会产生滑动。
二丶动画
视图动画和属性动画都可以完成滑动,依靠平移来实现。//视图动画: TranslateAnimation animation = new TranslateAnimation(....); animation.setDuration(2000); view.startAnimation(animation); //属性动画: ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationX", 600); animator.setDuration(2000); animator.start();
实现效果:
三丶修改View的布局参数
这种滑动方式,改变的是view相对于父view中的位置,实现也比较简单,适合于用户交互的view,当然合适与否还是根据,自定义View效果实现方式来确定安排的。LinearLayout.LayoutParams lp new LinearLayout.LayoutParams(..); //根据父view来确定该选什么的LayoutParams; lp.leftMargin = 400; view.setLayoutParams(lp);
最终的实现效果:
还可以直接调用view的layout方法:
view.layout(400,geTop(),getRight(),getBottom());
最终的效果都是一样的。
除开之外还有offsetLeftAndRight(int offset)和offsetTopAndBottom(int offset),来修改布局的偏移量,用得比较少提示下就行了。
三种滑动方式总结就先到这儿了。属性动画推荐郭霖大神的三篇文章:
Android属性动画完全解析(上),初识属性动画的基本用法
Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
相关文章推荐
- android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu
- android 三种实现水平向滑动方式(ViewPager、ViewFilpper、ViewFlow)的比较
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果 .
- Android 自定义TextView 左右滑动实现数字自增长
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android中三种方式实现水平滑动ViewPager,ViewFilpper,ViewFlow
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu
- android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- android 三种实现水平向滑动方式(ViewPager、ViewFilpper、ViewFlow)的比较
- (转)android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu
- android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu[转]
- android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu
- Android自定义ViewGroup自动换行实现滑动任意布局及事件处理效果
- Android 自定义view 基本实现方式和自定义属性
- android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果