Android view的位移滑动

基础

Android view的移动不管特效多么绚丽,都是view控件的基础移动实现的。

方式:

scrollTo/scrollby: view控件内容移动。

动画:给view实现移动效果。

LayoutParams: 使view重新布局实现view移动。

1: scrollBy/scrollTo

1.1: 内容左边界

View:对于单个view,内容左边界就是文字图片等的左边界。eg:botton可以很大但他的内容显示可能就一个单词,

而内容左边界就是这个单词的左边起始位置。

ViewGroup:以单个view的理解,ViewGroup的内容左边界就是它包裹的控件的左边界。

1.2 scrollBy/scrollTo滑动

view 控件内容的滑动,eg: ScrollView包裹的控件,Button上显示的文字,但控件自身的位置不会改变。

// scrollBy scroolTo源码

public void scrollBy(int x, int y) {

scrollTo(mScrollX + x, mScrollY + y);

}

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();

}

}

}

这里mScrollx/mScrolly是view内容已经滑动的距离可由get方法获取,从源码可以看出.

scrollBy是在现有基础上滑动x, y距离。

scrollTo是滑动到x, y位置。

方向

上述两个方法都是对mScrollx/mScrolly进行操作的,

mScrollx : 已view内容左边界为准,向左滑为正,向右滑为负。

mScrolly: 已view内容上边界为准,向上滑为正,向下滑为负。

即左上为正,右下为负。

2. 动画

使用动画操作的是view的translationX与translationY属性。可以使用传统动画或者属性动画。

TranslateAnimation animation = new TranslateAnimation(0f, 0f, 0f, 150f);

animation.setDuration(1500);

view.startAnimation(animation);

3. 布局参数LayoutParams

RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)

mTvLayoutParam.getLayoutParams();

layoutParams.topMargin = layoutParams.topMargin + 50;

mTvLayoutParam.requestLayout();

直接代码改变view的布局参数从根本上改变view的位置,

mTvTranslate.offsetTopAndBottom(50);

这个方法根本上也是对LayoutParams的改变,只是在原有的LayoutParams上进行了加减。

4. 源码

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐