根据滑动改变view的大小和位置

本文详细介绍了如何实现一个需求,即在页面中,titlebar下方的头像随着scrollview滑动进行缩放并最终停在titlebar上。通过分析问题,将图片放置在titlebar和平级位置,并监听scrollview的滑动事件来调整图片的大小和位置。通过onTouch和scrollChangeListener的结合使用,解决了滑动不流畅和快速滑动时的精确性问题,实现了流畅且精确的效果。
摘要由CSDN通过智能技术生成
需求描述

最近项目中有这样一个需求,页面有titlebar和scrollowview两部分,在titlebar的下边有一个头像,随着scrollowview的滑动,头像要缩放到固定大小然后停留在titlebar上不动了。

问题分析

首先这个需求并不陌生,类似于悬浮按钮。但是不同的是有缩放。如果将这个图片放在scrollview中的话,随着scrollview的滑动,图片是从titlebar的下边走了,被titlebar遮盖了。所以说我们要把图片放在和titlebae,scrollview平级的位置上。通过对scrollowview的changelistener的监听来改变图片的位置和大小。

代码实现

投机取巧,通过改变padding的方式来改变view的位置和大小

scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
            @Override
            public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
                if(top <=0){
                    top = rl_userhead.getPaddingTop();
                    bottom = rl_userhead.getPaddingBottom();
                    right = rl_userhead.getPaddingRight();
                    titleHeight = DensityUtil.dip2px(MainActivity.this,44);
                    small_top = DensityUtil.dip2px(MainActivity.this,9);
                    small_bottom = DensityUtil.dip2px(MainActivity.this,55);
                    small_right = DensityUtil.dip2px(MainActivity.this,21);
                }
                Log.e("输出y:",String.valueOf(scrollY));
                Log.e("输出:",String.valueOf(scrollY/44.0));

                if(scrollY<=0){
                    rl_userhead.setPadding(rl_userhead.getPaddingLeft(),top,right,bottom);
                }else if(scrollY>0 && scrollY<titleHeight){
                    rl_userhead.setPadding(rl_userhead.getPaddingLeft(),(int)(top-scrollY/44*35.0),(int)(right+ scrollY
在Unity中,Scroll View通常用于场景视图里展示大量游戏对象,当子内容数量变化时,你需要动态调整Content物体的滑动位置以便用户能够查看所有内容。这涉及到两个关键步骤: 1. **设置Scroll View组件**: 首先,在Unity编辑器中,选中包含所有子物体的游戏物体,然后添加`UI Canvas`并将其作为根,接着在Canvas上添加`Vertical Layout Group`或`Horizontal Layout Group`,最后在布局组上添加`ScrollView`。 2. **监听内容变化**: 使用`OnEnable()`或`Update()`函数,你可以获取`ScrollView`的内容大小(例如,通过`children.Count`)以及当前已显示的范围(如`contentSizeDelta`属性)。当你发现内容数量发生变化时,计算新的滑动偏移值。 ```csharp private ScrollView scrollView; void Start() { scrollView = GetComponent<ScrollView>(); } void Update() { if (scrollView != null) { int contentCount = scrollView.transform.childCount; // 根据内容数量计算新滑动位置 float newScrollPosition = CalculateNewScrollPosition(contentCount); // 更新滚动条的位置 scrollView.verticalNormalizedScrollValue = newScrollPosition / contentCount; } } private float CalculateNewScrollPosition(int contentCount) { // 算法可以根据你的需求调整,这里只是一个简化示例 return Mathf.Clamp(0f, 1f - 1f / contentCount, 1f); } ``` 3. **处理边界条件**: 调整滑动位置时,需要确保不会超出界,`Mathf.Clamp`函数可以保证这一点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值