Android OnPageChangeListener阿尔法交叉衰落

Android OnPageChangeListener阿尔法交叉衰落,android,scroll,cross-fade,Android,Scroll,Cross Fade,关于Android中的交叉衰落有很多问题,但都包括动画。我的问题是关于使用ViewPager的OnPageChangeListener进行交叉衰落 我有一个ViewPager,它可以有无限多的视图,但实际上使用了大约6或7个视图。那里发生的事情不多 ViewPager中的每个视图都有一个背景位图,该位图应固定并与下一个(或上一个)视图的背景交叉淡入,而不是与视图的其余部分一起滚动 为了实现这一点,我将背景解耦并添加到ArrayList中,然后将其分配给ImageView。但是,由于我不想冒险让我

关于Android中的交叉衰落有很多问题,但都包括动画。我的问题是关于使用ViewPager的OnPageChangeListener进行交叉衰落

我有一个ViewPager,它可以有无限多的视图,但实际上使用了大约6或7个视图。那里发生的事情不多

ViewPager中的每个视图都有一个背景位图,该位图应固定并与下一个(或上一个)视图的背景交叉淡入,而不是与视图的其余部分一起滚动

为了实现这一点,我将背景解耦并添加到ArrayList中,然后将其分配给ImageView。但是,由于我不想冒险让我的活动以大量图像视图结束,我想到了以下结构:

<FrameLayout 
    android:id="@+id/backgroundContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/bottomImage"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:scaleType="center" />

    <ImageView
        android:id="@+id/middleImage"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:scaleType="center" />

    <ImageView
        android:id="@+id/topImage"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:scaleType="center" />

</FrameLayout>
如果我想交换背景的话,这很好用。我希望在用户滑动ViewPager时背景相互交叉淡入。我已经得到了前向滚动的淡入淡出效果,但我不明白为什么后向滚动的淡入淡出效果不好。在向后滚动期间,中间背景应淡入底部背景

恐怕我遗漏了什么。我从不更改底部背景的alpha值,但是日志结果总是显示与中间背景完全相同的
getAlpha()

@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    if(_currentBackgroundPosition == position) {
        // scroll forward
        _topBackground.setAlpha(positionOffset)
    } else {
        //scroll backward
        _middleBackground.setAlpha(positionOffset);               
    }

    MyLog.i(TAG, "Bottom BackgroundAlpha: " + _bottomBackground.getAlpha());
    MyLog.i(TAG, "Middle BackgroundAlpha: " + _middleBackground.getAlpha());
    MyLog.i(TAG, "Top BackgroundAlpha: " + _topBackground.getAlpha());
}
等等!还有一件事我真的不知道怎么解决。尽管向前滚动淡入功能正常。背景中有一个超短的闪烁。我认为这是因为我设置了
onPageSelected
方法

是否有其他方法可以创建/修复此行为?

是您的朋友。我将对您尝试的内容采取不同的方法,但它会产生我所理解的与您期望的结果相匹配的结果-向左/向右滑动内容,但会在两个不移动的背景图像之间淡出

ViewPager
中的每个
片段将具有如下布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/image_view"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:scaleType="center" />
    <LinearLayout
        android:id="@+id/content_area"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!-- content goes here -->
    </LinearLayout>
</FrameLayout>
最后将此
PageTransformer
连接到您的
ViewPager

mViewPager.setPageTransformer(true, new CustomPageTransformer());

我已经在现有的应用程序中对其进行了测试,只要片段布局有一个透明的背景,它就可以正常工作。

你让我开心!如果它是独立工作的,那么我现在将把它实现到我的项目中。谢谢太好了,很高兴它帮助了你。谢谢你的赏金,你帮了我很多时间。客户在催我!谢谢你,伙计!
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    if(_currentBackgroundPosition == position) {
        // scroll forward
        _topBackground.setAlpha(positionOffset)
    } else {
        //scroll backward
        _middleBackground.setAlpha(positionOffset);               
    }

    MyLog.i(TAG, "Bottom BackgroundAlpha: " + _bottomBackground.getAlpha());
    MyLog.i(TAG, "Middle BackgroundAlpha: " + _middleBackground.getAlpha());
    MyLog.i(TAG, "Top BackgroundAlpha: " + _topBackground.getAlpha());
}
mViewPager.setPageTransformer(true, new CustomPageTransformer());