【问题标题】:How to determine if an ImageView is visible in CollapsingToolbar?如何确定 ImageView 在 CollapsingToolbar 中是否可见?
【发布时间】:2018-02-08 19:00:03
【问题描述】:

我有一个折叠工具栏布局,如下所示:

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/expanded_toolbar_height"
        android:fitsSystemWindows="true"
        app:contentScrim="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

       <include layout="@layout/circle_image_view"/>

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    </android.support.design.widget.CollapsingToolbarLayout>

circle_image_view 在哪里

<com.example.ui.CircularParseImageView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/iv_circular_backdrop"
    android:layout_width="120dp"
    android:layout_height="120dp"
    android:layout_gravity="center"
    android:fitsSystemWindows="true"
    android:scaleType="centerCrop"
    android:transitionName="@string/transition_pic"
    app:layout_collapseMode="parallax" />

这只是一个带有圆形遮罩的标准图像视图。当折叠工具栏展开时,圆形图像视图可见,显示如下:

折叠时,图像视图不再可见,如下所示:

但是,即使在折叠状态下,图像视图的可见性似乎仍设置为可见。当用户按下后退按钮时,我需要确定图像是否可见以执行共享元素过渡动画。 如何确定图片当前是否在折叠工具栏中可见?

我尝试过的:

getVisibility() 保持不变

isOpaque() 保持不变

getImageAlpha() 保持不变

【问题讨论】:

    标签: android android-imageview android-collapsingtoolbarlayout


    【解决方案1】:

    我能够通过使用 CollapsingToolbarLayout#getContentScrim() 解决问题,根据文档:

    返回用于前景稀松布的可绘制对象。

    似乎图像视图始终可见,但前景网格将其隐藏,因此使用 alpha 属性 getContentScrim().getAlpha() 您可以确定图像是否可见。

    【讨论】:

      【解决方案2】:

      这可以使用您自己的 OnOffsetChangedListener 实现来实现。

      AppBarLayout appBarLayout = (AppBarLayout) view.findViewById(R.id.app_bar_layout);
      appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
              @Override
              public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
                  if (Math.abs(verticalOffset) == appBarLayout.getTotalScrollRange()) {
                      // Collapsed
                  } else if (verticalOffset == 0) {
                      // Expanded
                  } else {
                      // Somewhere in between
                  }
              }
          }););
      

      【讨论】:

        【解决方案3】:
        mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
                    @Override
                    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
                        boolean isContentHide = mCollapsingToolbarLayout.getScrimVisibleHeightTrigger() + Math.abs(verticalOffset) > mCollapsingToolbarLayout.getHeight();
                    }
                });
        

        【讨论】:

        • 很好的答案。谢谢!
        猜你喜欢
        • 2017-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-08
        • 2016-02-07
        • 2015-10-30
        • 2013-05-10
        • 2010-12-03
        相关资源
        最近更新 更多