Android view的位移滑动

Android view的位移滑动

基础

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

方式:

  1. scrollTo/scrollby: view控件内容移动。
  2. 动画:给view实现移动效果。
  3. LayoutParams: 使view重新布局实现view移动。

1: scrollBy/scrollTo

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

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

  2. 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方法获取,从源码可以看出.

  1. scrollBy是在现有基础上滑动x, y距离。
  2. scrollTo是滑动到x, y位置。
方向

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

  1. mScrollx : 已view内容左边界为准,向左滑为正,向右滑为负。
  2. 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. 源码

MoveViewActivity

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值