【问题标题】:Expand Recyclerview item with animation when scrolling up向上滚动时用动画展开 Recyclerview 项目
【发布时间】:2015-09-01 09:30:31
【问题描述】:

Iphone App video link

如何设计和开发上面视频中发布的视图?这基本上就是带有动画的recyclerview的item扩展。我尝试过使用 recyclerview 的 onItemtouchlistener 以及一些带有动画的自定义视图,但没有得到准确的结果。

最后我遇到了 addonscrolllistener,这给了我结果但不准确。

 mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            if(newState == RecyclerView.FOCUS_UP) {
                System.out.println("hello, ia m going up");
            }
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            if (dy > 0){
                TextView tv = (TextView)recyclerView.findViewById(R.id.title);
                //tv.setVisibility(View.VISIBLE);
                if (tv.getVisibility()==View.VISIBLE){
                     System.out.println("yes");
                }else {
                    slideToTop(tv);
                }
            }
        }
    });

 private void slideToTop(View view){
    TranslateAnimation animate = new TranslateAnimation(0,0,0,-view.getHeight());
    animate.setDuration(1000);
    animate.setFillAfter(false);
    view.startAnimation(animate);
    view.setVisibility(View.VISIBLE);
}

【问题讨论】:

  • 我知道当客户在最后一刻倾销你的工作时令人沮丧,但读者不会因为紧急请求而着急。所有问题在这里都同等重要。如果您真的遇到困难,值得保留其他 Android 开发人员的联系方式,或者使用 AirPair 之类的付费服务,并支付紧急援助费用。
  • 读者是否需要观看您的视频才能理解问题?如果是这样,还请描述它是关于什么的 - 问题应该在这里自包含。

标签: android android-layout android-recyclerview recyclerview-layout


【解决方案1】:

我认为您的问题太宽泛了 - 但是,这里有一些伪代码:

onScrolled() {
    View child = getSecondVisibleChild();
    int distanceFromTop = child.getTop();
    int distanceAtWhichExpandingShouldOccur = 100;
    if(distanceFromTop < distanceAtWhichExpandingShouldOccur ) {
         child.setHeight(child.getOriginalHeight() + (distanceFromTop - distanceAtWhichExpandingShouldOccur))
    }
}

所以你会注意到,第二个可见的孩子是身高发生变化的孩子。当它从窗口顶部小于distanceAtWhichExpandingShouldOccur 时,它会发生变化。它的高度会发生变化以确保其 bottom 保持静止 - 因此它的高度会随着其 top 的移动而增加。

一旦它不再是第二个可见的孩子(又名,它的top 为 0),它应该像往常一样滚动,并且 下一个 孩子的高度应该在 top 小于distanceAtWhichExpandingShouldOccur

【讨论】:

    【解决方案2】:

    这个库可以成为你的学习案例:https://github.com/florent37/MaterialLeanBack

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 2021-10-29
      • 1970-01-01
      • 2015-06-10
      相关资源
      最近更新 更多