精华内容
参与话题
问答
  • ScrollView

    2017-08-26 17:17:17
    ScrollView所占的高度.即ScrollView内容的高度.常常有一部分内容要滑动后才可见,这部分的高度也包含在了mScrollView.getChildAt(0).getMeasuredHeight()中. view.getScrollY表示:  ScrollView

    mScrollView.getChildAt(0).getMeasuredHeight()表示:

    ScrollView所占的高度.即ScrollView内容的高度.常常有一部分内容要滑动后才可见,这部分的高度也包含在了mScrollView.getChildAt(0).getMeasuredHeight()中.

    view.getScrollY表示:

     ScrollView顶端已经滑出去的高度.

    view.getHeight()表示:

    ScrollView的可见高度.

    其中getChildAt表示得到ScrollView的child View,因为ScrollView只允许一个child view(ViewGroup),所以getChildAt(0).getMeasuredHeight()表示得到子View的高度,包含了需要滑动才能显示的内容。 getScrollY()表示得到y轴的滚动距离,getHeight()为scrollView的可见高度。当getScrollY()达到最大时加上scrollView的可见高度就等于它所有内容的高度。

    展开全文
  • scrollView

    2014-09-18 21:32:00
    设置内容页的大小 scrollView 添加图片 如果想让视图滑动,内容页的大小必须比ScrollView得大小要大 scrollView.contentSize = CGSizeMake(320*8, 568*8); 设置区域相对于frame上下左右 在...


    设置内容页的大小
         

    scrollView 添加图片 如果想让视图滑动,内容页的大小必须比ScrollView得大小要大
        scrollView.contentSize = CGSizeMake(320*8, 568*8);
        
     

    设置区域相对于frame上下左右 在哪显示.
     

      scrollView.contentInset = UIEdgeInsetsMake(100, 100, 0, 0);
     
      

    设置内容区的偏移量 ,修改ScrollView 修改左上角的点距离自身坐标原点的位置,修改bound 的origin .

        scrollView.contentOffset = CGPointMake(300, 0);
        

       [scrollView setContentOffset:CGPointMake(300, 0) animated:YES] ;
        
       

    设置scrollview能否滑动..yes 可以, no 不可以

       scrollView.scrollEnabled =YES;
        scrollView.tag = 200;
      

    隐藏水平滑动指示器
        scrollView.showsHorizontalScrollIndicator = NO;
        
       

    隐藏垂直滑动指示器
        scrollView.showsVerticalScrollIndicator = NO;
        
     

    关闭滑动时的回弹效果
        scrollView.bounces = NO;
        
      

    设置当点击状态条时能否滑动到最顶端
         scrollView.scrollsToTop =YES;
        
      

    设置ScrollView是否可以整屏滑动 (一次滑动整个ScrollView的大小)
        scrollView.pagingEnabled = YES;
        
       

    scrollview 的代理
        scrollView.delegate = self;


    [scrollView setDelegate:self];
        
     

    设置最大缩放比例
        
        scrollView.maximumZoomScale = 100;
      

    设置最小缩放比例
        
        scrollView.minimumZoomScale = 0.001;




    还原ScrollView
        
        [scroll setZoomScale:1.0 animated:YES];





    滑动时就会触发, (会触发多次)
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
        NSLog(@"%s",__FUNCTION__);
    }



    只要缩放就触发
    - (void)scrollViewDidZoom:(UIScrollView *)scrollView NS_AVAILABLE_IOS(3_2)

    {
        NSLog(@"%s",__FUNCTION__);
        
    }


    当将要拖拽时触发, 将要滑动时触发
    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
    {
        NSLog(@"%s",__FUNCTION__);


    }



    当结束拖拽时触发,手指将要离开屏幕时触发
    - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS(5_0)
    {
        NSLog(@"%s",__FUNCTION__);

    }



    当结束拖拽时触发, 手指离开屏幕
    - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
    {

        NSLog(@"%s",__FUNCTION__);
    }


    当ScrollView将要减速时触发 将要停止滑动时触发
    - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
    {

        NSLog(@"%s",__FUNCTION__);

    }


    当ScrollView 结束减速时触发 , 停止滑动
    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
    {

     
        NSLog(@"%s",__FUNCTION__);
    }


    当设置ScrollView 有一个动画效果时,该方法触发.
    - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
    {
        NSLog(@"%s",__FUNCTION__);

    }


    用来设置要缩放的ScrollView上面的哪一个子视图,只能是子视图,不能是ScrollView本身
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    {
        
        
        
        return [scrollView viewWithTag:100];
    }


    将要开始缩放时触发
    - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view NS_AVAILABLE_IOS(3_2)
    {    NSLog(@"%s",__FUNCTION__);
    }



    结束缩放时触发
    - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale

    {    NSLog(@"%s",__FUNCTION__);}



    Scrollstotop 属性设置为yes时, 该方法才会触发,进一步询问点击进度条是否有效果.
    - (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
    {    NSLog(@"%s",__FUNCTION__);
        return YES;
    }


    当点击状态条并且ScrollView滑动到顶端时触发.
    - (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
    {    NSLog(@"%s",__FUNCTION__);
    }






    转载于:https://my.oschina.net/qccc/blog/315750

    展开全文
  • Flutter之ScrollView简析

    2020-04-13 09:34:33
    ScrollView是一个抽象类,其具体的子类如下图所示: 本篇博文不会过多深入到ScrollView的细节里面,就简单的梳理下其布局流程。既然是有个抽象类,其提供了一个抽象方法: List<Widget> buildSlivers(Build...

    ScrollView是一个抽象类,其具体的子类如下图所示:
    在这里插入图片描述

    本篇博文不会过多深入到ScrollView的细节里面,就简单的梳理下其布局流程。既然是有个抽象类,其提供了一个抽象方法: List<Widget> buildSlivers(BuildContext context); 该方法就是用来构建我们的滚动列表的每一项,下面就来分析这个布局方法怎么构建出来的。因为ScrollView是一个StatelessWidget的控件,所以其构建UI的方法是 Widget build(BuildContext context)

       ///Flutter 构建UI的入口方法
      Widget build(BuildContext context) {
        ///调用buildSlivers来构建页面
        final List<Widget> slivers = buildSlivers(context);
        ///省略部分代码
        final Scrollable scrollable = Scrollable(
          ///省略部分代码
          ///将slivers交给Scrollable
          viewportBuilder: (BuildContext context, ViewportOffset offset) {
            return buildViewport(context, offset, axisDirection, slivers);
          },
        );
        return primary && scrollController != null
          ? PrimaryScrollController.none(child: scrollable)
          : scrollable;
      }
    

    上面代码主要做了两件事
    1、调用buildSlivers创建可以滚动的列表items
    2、将步骤1创建的列表交给Scrollable控件
    注意我们的列表布局被通过buildViewport嵌套在了ViewPort或者ShrinkWrappingViewport中,代码如下:

        Widget buildViewport(
        BuildContext context,
        ViewportOffset offset,
        AxisDirection axisDirection,
        List<Widget> slivers,
      ) {
        if (shrinkWrap) {
          return ShrinkWrappingViewport(
            axisDirection: axisDirection,
            offset: offset,
            slivers: slivers,
          );
        }
        return Viewport(
          axisDirection: axisDirection,
          offset: offset,
          slivers: slivers,
          cacheExtent: cacheExtent,
          center: center,
          anchor: anchor,
        );
      }
    

    注意build方法的最终返回的Widget 根据primaryscrollController两个条件.可能返回PrimaryScrollController,也可能返回Scrollable:
    所以ScrollView的整体布局结构可以用下图表示:
    在这里插入图片描述
    关于ViewPort是flutter中一个很重要的概念,博主会另外开博文说明。分析到这儿,ScrollView的整体布局就可以如下所示:


    现在先分别看看ScrollView的两个子类BoxScrollView和CustomScrollView子类对buildSlivers怎么处理的。

    CustomScrollView的builderSlivers简析:

    buildSlivers的处理很简单,直接就返回了我们传给CustomScrollView的widget数组交给父类ScrollView的build方法进行调用

    
     /// The slivers to place inside the viewport.
      final List<Widget> slivers;
      @override
      List<Widget> buildSlivers(BuildContext context) => slivers;
    

    BoxScrollView的builderSlivers简析:

    事实上BoxScrollView也是一个抽象类,它重写了buildSlivers方法并进行了响应的处理:它直接调用了BoxScrollView的抽象方法buildChildLayout构建滚动列表的items,然后经过处理后返回之:

      ///子类需要重写
      Widget buildChildLayout(BuildContext context);
      @override
      List<Widget> buildSlivers(BuildContext context) {
        Widget sliver = buildChildLayout(context);
        ///省略部分代码 
        return <Widget>[ sliver ];
      }
    

    所以我们如果直接使用ScrollView需要重写buildSlivers方法,而我们如果使用BoxScrollView的话就需要重写buildChildLayout方法即可。
    从文章开头的图我们知道BoxSrollView提供了两个子类GridView和ListView,关于GridView可以参看博主的这篇博文,我们来瞅下GridView和ListView的buildChildLayout方法:

    GridView的buildChildLayout方法:

       @override
      Widget buildChildLayout(BuildContext context) {
        return SliverGrid(
          delegate: childrenDelegate,
          gridDelegate: gridDelegate,
        );
      }
    

    ListView的buildChildLayout方法:

        @override
      Widget buildChildLayout(BuildContext context) {
        if (itemExtent != null) {
          return SliverFixedExtentList(
            delegate: childrenDelegate,
            itemExtent: itemExtent,
          );
        }
        return SliverList(delegate: childrenDelegate);
      }
    

    可以发现一个GirdView和ListView有一个共同点,就是最终slivers数组都被Sliver所嵌套,GirdView对应的是SliverGrid,ListView对应的是SliverList或SliverFixedExtendLists. Flutter提供了大量的Sliver控件可以可以使用,博主后面会另外开博文说明

    展开全文
  • ScrollView中嵌套ScrollView时,滑动时,默认情况下,手指在哪个ScrollView上滑动,滑动事件就被其消费掉,滑动距离就在其上。 有时,会期望滑动内部ScrollView时,由外层的控制器来控制滑动的距离应该由哪个...

    ScrollView中嵌套ScrollView时,滑动时,默认情况下,手指在哪个ScrollView上滑动,滑动事件就被其消费掉,滑动距离就在其上。

    有时,会期望滑动内部ScrollView时,由外层的控制器来控制滑动的距离应该由哪个ScrollView来体现。看到一种实现方式,在此记录下:

    总体思路是:

    1. 移除当前被嵌套的ScrollView自身的contentOffset的观察者
    2. 对被嵌套的ScrollView的contentOffset属性设置观察者,设置为当前控制器
    3. contentOffset发生变化时,通过监听函数获取位移,根据事件生产者ScrollView,以及预先设置的条件,移动特定ScrollView的位移。
    // contentOffset属性的声明
    static NSString *const kObseverKeyContentOffset = @"contentOffset";
    
    -(void)chooseNested:(id<NestedDelegate>)delegate{
        if (_currentNestedDelegate) {
          // 移除上一个ScrollView的contentOffset的监听
            [_currentNestedDelegate.getNestedScrollView removeObserver:self forKeyPath:kObseverKeyContentOffset];
        }
        // 保存当前被嵌套的scrollView对象
        _currentNestedDelegate = delegate;
        // 添加被嵌套的ScrollView的contentOffset属性监听
        [_currentNestedDelegate.getNestedScrollView  addObserver:self forKeyPath:kObseverKeyContentOffset options:NSKeyValueObservingOptionNew context:nil];
    }
    
    // 监听函数
    -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
        if ([kObseverKeyContentOffset isEqualToString:keyPath]) {
            [self scrollViewDidScroll:object];
        }
    }
    
    // 具体实现ScrollView的滑动
    -(void)scrollViewDidScroll:(UIScrollView *)scrollView{
        //最大上滑距离
        CGFloat maxOffset = _layoutHeaderViewHeight.constant;
        CGFloat mainContentOffsetY = _mainScrollView.contentOffset.y;
        if (scrollView == _mainScrollView) {
            if (mainContentOffsetY > maxOffset) {
                [_mainScrollView setContentOffset:CGPointMake(0, maxOffset)];
            }else if(mainContentOffsetY < 0){
                [_mainScrollView setContentOffset:CGPointMake(0, 0)];
            }
        }else if (scrollView == _currentNestedDelegate.getNestedScrollView){
            UIScrollView *currentScrollView = _currentNestedDelegate.getNestedScrollView;
            CGFloat currentOffsetY = currentScrollView.contentOffset.y;
            //避免死循环
            if (currentOffsetY == 0) {
                return;
            }
            
            if(currentOffsetY < 0){
                //下滑
                if(mainContentOffsetY > 0){
                    [_mainScrollView setContentOffset:CGPointMake(0, mainContentOffsetY+currentOffsetY)];
                    [currentScrollView setContentOffset:CGPointMake(0, 0)];
                }
            }else if(currentOffsetY >0){
                //上拉
                if(mainContentOffsetY < maxOffset){
                    [_mainScrollView setContentOffset:CGPointMake(0, mainContentOffsetY+currentOffsetY)];
                    [currentScrollView setContentOffset:CGPointMake(0, 0)];
                }
            }
        }
    }
    

    其他的协议定义如下,子控制器继承它,通过此函数来获取子控制器中的ScrollView对象。

    @protocol NestedDelegate <NSObject>
    
    -(UIScrollView *)getNestedScrollView;
    
    @end
    
    展开全文
  • 使用到的方法为:... scrollView = findViewById(R.id.scrollview); findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { scrollView.scrollT
  • ScrollView示例

    2019-07-27 17:13:42
    var scrollView = new ccui.ScrollView(); // 设置方向 scrollView.setDirection(ccui.ScrollView.DIR_VERTICAL); // 允许交互 scrollView.setTouchEnabled(true); // 设置回弹 scrollView.setBounceEnabled(true); ...
  • Android ScrollView

    2019-07-06 19:01:56
    Android ScrollView 转载:https://www.cnblogs.com/plokmju/p/android_ScrollView.html 前言 本篇博客主要讲解ScrollView和HorizontalScrollView两个容器的使用。它们分别代表了垂直滚动以及水平滚动,滚动的内容是...
  • android ScrollView 吸顶效果

    千次阅读 2019-01-23 16:01:28
    viewA在ScrollView中 viewB与ScrollView同级 根据ScrollView滑动距离判断同级的viewB 是否显示 当滑动的距离大于viewA到顶部的距离,viewB就显示,反之隐藏 xml代码 &lt;?xml version="1.0" encoding...
  • 你不必知道它内部怎么排版,只需要知道你需要多少个实例,实例需要的信息 例如我们需要点击查看问题和忽略问题,并且提示数字会变化 1.储存信息 定义一个personinfo ...public class PersonInfo ... public s...
  • 该资源高效实用Unity ScrollView,满足各类要求,请使用个人技术研究,不得用于商业用途。
  • 最新UGUI Super ScrollView插件,基于UGUI ScrollRect提供易于定制的ScrollView。它是一组C#脚本,可帮助您创建所需的ScrollView。它非常强大,并且针对性能进行了高度优化。
  • 背景:ScrollView嵌套PreferenceFragment。我使用的版本Preference的树的支撑是通过RecyclerView。 原因:在Activity的setContentView方法中,解析了Fragment,并调用了PreferenceFragmentCompat的onCreateView...
  • sl_date = (ScrollView) findViewById(R.id.sl_date); sl_date.setOnTouchListener(this); myGestureDetector.setIsLongpressEnabled(true); bt_edit_date.setOnClickListener(new OnClickListener()...
  • Flutter ScrollView嵌套ListView滑动冲突

    千次阅读 2019-05-30 19:00:59
    无论是SingleChildScrollView、NestedScrollView还是CustomScrollView,在嵌套ListView或其他可以滑动的widget的时候,导致滑动冲突或卡顿等, 是因为二者都有可滑动属性,所以解决办法就是禁掉二者其一的滑动,...
  • 冲突来源于 ScrollView 向下滑动的时候会触发 SwipeRefreshLayout 下拉刷新。 解决思路: 根据ScrollView 滑动距离动态处理SwipeRefreshLayout 刷新。 mScrollView.setScrollViewListener(new GradationScrollView....
  • react-native-spring-scrollview滑动效果更平滑流畅,ScrollView滑动能看出明显的跳跃
  • scrollview自适应高度

    2020-01-17 12:09:22
    网上有许多文章写过了,无非就是想办法获取屏幕高度然后计算 我这里提供一个更优雅的方法 vue中测试通过 this.$nextTick(() => { let rest = document.querySelector("#rest");... rest.style.height = `calc...
  • 一个 ScrollView 里嵌着一个 EditText(设置可滑动)。 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:...
  • 保持scrollView始终和屏幕等宽高,蓝色和绿色块始终和scrollView等宽,高度随scrollView变化。 二、布局步骤 1、给scrollView添加约束。 相对于view/Safe Area:添加上左下右均为0的约束。 2、对蓝色块...

空空如也

1 2 3 4 5 ... 20
收藏数 23,270
精华内容 9,308
关键字:

scrollview