如何在Scroll上的Recycler View Item上创建视差效果?

时间:2015-12-12 16:37:50

标签: android animation android-recyclerview

嘿我有一个回收者视图和回收者视图的每个项目包含ImageView在FrameLayout和图像中拉伸以适合所有项目大小
我想在Recycler View Item图像上创建视差效果

当我向上和向下滚动时,我可以移动图像以显示隐藏的部分

像swift

中的Tutorial一样

我在Recycler View滚动中做了什么

  events_list.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            final DynamicImageView imageView = (DynamicImageView) recyclerView.findViewById(R.id.item_image);
            if (imageView.getVisibility() == View.VISIBLE) {
                if (dy > 0) {
                    Animation a = new Animation() {

                        @Override
                        protected void applyTransformation(float interpolatedTime, Transformation t) {
                            FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) imageView.getLayoutParams();
                            params.topMargin = (int)(-50 * interpolatedTime);
                            imageView.setLayoutParams(params);
                        }
                    };
                    a.setDuration(100); // in ms
                    imageView.startAnimation(a);

                } else if (dy < 0) {
                    Animation a = new Animation() {

                        @Override
                        protected void applyTransformation(float interpolatedTime, Transformation t) {
                            FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) imageView.getLayoutParams();
                            params.topMargin = (int)(50 * interpolatedTime);
                            imageView.setLayoutParams(params);
                        }
                    };
                    a.setDuration(100); // in ms
                    imageView.startAnimation(a);
                }
            }


        }
    });

我知道这个代码不是最佳解决方案,它还需要检查所有可见项而不是第一个,但我的问题在于我改变了图像视图的边距我在项目和项目之间获得了一个空闲空间动画并不完美 有什么帮助吗?

1 个答案:

答案 0 :(得分:-1)

我发现这个Library实现了我想要的东西

如何使用

<com.fmsirvent.ParallaxEverywhere.PEWImageView
        android:id="@+id/grid_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        pew:block_parallax_x="true"
        pew:reverse="reverseY"

        android:scaleType="centerCrop"
        />