当前位置: 首页 > 知识库问答 >
问题:

Android: PageTransformer在第一次触摸前应用了正确的比例,但不是alpha

景仲渊
2023-03-14

我有一个< code>PageTransformer,它可以正确显示我的< code>ViewPager,第二个元素被正确缩放,但是第二个元素没有应用alpha。但是,稍微拖动< code>ViewPager后,下一个视图会正确显示。我的alpha和scale的代码是一样的,我不确定这里的问题是什么。

我尝试过在<code>ViewPagerAdapter</code>添加了内容(例如<code>viewPager.scrollBy()</code>和<code>pager)后从处理程序调用代码。beginFakeDrag()),但这些都没有帮助。

viewPager。设置了setOffscreenPageLimit(2)。我曾尝试在<code>适配器</code>中实例化时以编程方式将alpha设置为视图,但没有效果。如果正确地应用了刻度,那么阿尔法也应该正确。

@Override
    public void transformPage(View page, float position)
    {
        float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
        float alphaFactor = Math.max(MIN_ALPHA, 1 - Math.abs(position));

        page.setScaleX(scaleFactor);
        page.setScaleY(scaleFactor);

        page.setAlpha(alphaFactor);
    }

共有2个答案

穆远
2023-03-14

我在ViewPager上设置了android:animateLayoutChanges=true。一旦我删除了这个,它就正确加载了。别问我为什么它会在那里。

徐知
2023-03-14

(编辑)正确的解决方案

ViewPager替换为ViewPager2

有用的资源:

    < Li > https://developer . Android . com/training/animation/VP2-migration < Li > https://stack overflow . com/a/57694887/10504386

懒惰(但不是很酷,容易出错)解决方案:

不幸的是,我的布局中没有设置属性<;代码>;android:animateLayoutChanges=true。

当我将查看页面活动移动到片段时,我也遇到了同样的问题。

我认为问题是由于我重用了片段。在FragmentTransaction上,ViewPager在技术上仍然具有其旧值,因此它的视图不需要更改,这就是为什么PageTransex没有被触发。

基本上,您需要做的就是将ViewPager的当前项设置为0,然后将其设置为所需的值。

这是我的代码段(MyViewPager.kt,但不需要重写viewpaker)。

init {
    post {
        currentItem = 0
    }
}


fun setCurrentPage(position: Int) {
    post {
        setCurrentItem(position, true) // I want smooth scroll
    }
}   

 类似资料:
  • 父组件传过来的值 const props = defineProps<{ dialogEdit: boolean; edittData: object; ID: Array<string>; }>(); let check_id = ref<string[]>([]);

  • 问题内容: 我正在尝试用JavaFX创建我的第一个应用程序,而Button调用一个方法时遇到了问题(例如,打开另一个窗口)-我总是必须单击两次才能触发操作。 这是来自控制器的代码: 我的方法在这里实现: 问题答案: 最有可能在FXML中包含以下内容: 这使您的按钮可以调用您的方法。但是,您没有定义要在单击按钮时执行的逻辑,而是第一次说:“单击此按钮时,在我的按钮上放一个会叫“ 因此,您的第一次单击

  • 启用触摸保护 把 Yubikey-manager 安装在一个绝对路径:【译者注:homebrew 是 macOS 平台的包管理软件】 ❯ brew install libu2f-host libusb swig ykpers ❯ git clone git@github.com:Yubico/Yubikey-manager.git ❯ git submodule update --init --r

  • 使用自定义比较器,每次实例化比较器,而不是将其创建为常量(使用匿名类)并使用单个实例,有什么好处吗?我一直认为每次创建一个新实例没有什么好处,并且一直采用选项2(静态final字段中的单个实例)。 这里的假设是没有状态需要保留在比较器中。 如果do某物()被称为很多呢?如果do某物()从多个线程被调用怎么办?如果CUSTOM_COMPARATOR被拉到一个普通的班级里,公开而不是私下呢?

  • 问题内容: 所以我一直在四处寻找屏幕上触摸的坐标。到目前为止,我可以通过以下方式获得一触的坐标: 但是当用两根手指触摸时,我只会得到第一次触摸的坐标。多点触控功能(我用这个小教程进行了测试:http : //www.techotopia.com/index.php/An_Example_Swift_iOS_8_Touch,_Multitouch_and_Tap_Application)。所以我的问