CollapsingToolbarLayout定义动画开始

时间:2015-12-22 15:41:23

标签: android android-design-library

如何在CollapsingToolbarLayout中更改动画的开头?我发现动画是由$(document).ready(function(){ jQuery('#vmap').vectorMap({ map: 'world_en', backgroundColor: null, color: '#ffffff', hoverOpacity: 0.7, selectedColor: '#666666', enableZoom: true, showTooltip: true, values: sample_data, scaleColors: ['#C8EEFF', '#006491'], normalizeFunction: 'polynomial', onLabelShow: function (event, label, code) { if(sample_data[code] > 0) { //console.log(code); $.getJSON('/ajax/admin/ajaxcallpage', {country_key: code}, function(data) { //var school_count = 0; school_count = data; label.append(': ' + school_count + ' Schools'); }); } } }); }); 属性控制的。 但是" alpha"动画开始得太快了。我可以以某种方式更改动画属性吗?我想通过高度如此" 200dp"。

例如,如果我要定义app:contentScrim,我甚至不会看到图片,因为它在开始时已经被动画隐藏了。这是我的xml:

<CollapsingToolbarLayout... layout_height="150dp" >

3 个答案:

答案 0 :(得分:2)

我担心解决方案并不容易。

我必须创建自己的CollapsingToolbarLayout来更改原始内容。

原件: https://android.googlesource.com/platform/frameworks/support/+/6ba61c5/design/src/android/support/design/widget

在我的情况下,我更改了getScrimTriggerOffset方法

自:

final int getScrimTriggerOffset() {
    return 2 * ViewCompat.getMinimumHeight(this);
}

为:

final int getScrimTriggerOffset() {
    return 3 * ViewCompat.getMinimumHeight(this);
}

此方法在CollapsingToolbarLayout的第677行中用于确定是否显示或隐藏内容稀松布。

// Show or hide the scrims if needed
if (mContentScrim != null || mStatusBarScrim != null) {
     if (getHeight() + verticalOffset < getScrimTriggerOffset() + insetTop) {
         showScrim();
     } else {
         hideScrim();
     }
}

我尝试扩展CollapsingToolbarLayout并覆盖此方法,但它被声明为final。

我很抱歉迟到的回复,希望它有效

答案 1 :(得分:0)

  1. 创建您自己的CollapsingToolbarLayout。
  2. 覆盖下一个功能:setScrimsShown(显示/隐藏内容稀松布),onAttachedToWindow和onDetachedFromWindow。
  3. 在onAttachedToWindow中创建AppBarLayout.OnOffsetChangedListener并添加到parent.In onDetachedFromWindow中删除侦听器。(仅当父级为AppBarLayout 时才有效。)
  4. 在setScrimsShown中设置开始动画的规则。
  5. 示例:

    public class MyCollapsingLayout extends CollapsingToolbarLayout {
        private int mCurrentVOffset = 0;
        private AppBarLayout.OnOffsetChangedListener mListener = null;
    
        ...
    
        @Override
        public void setScrimsShown(boolean shown) {
            boolean show = /*your code */
    
            super.setScrimsShown(show);
        }
    
        @Override
        protected void onAttachedToWindow() {
            super.onAttachedToWindow();
    
            final ViewParent parent = getParent();
    
            if (parent instanceof AppBarLayout) {
                mListener = new AppBarLayout.OnOffsetChangedListener() {
                    @Override
                    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
                        mCurrentVOffset = verticalOffset;
                    }
                };
                ((AppBarLayout) parent).addOnOffsetChangedListener(mListener);
            }
        }
    
        @Override
        protected void onDetachedFromWindow() {
            final ViewParent parent = getParent();
            if (mListener != null && parent instanceof AppBarLayout) {
                ((AppBarLayout) parent).removeOnOffsetChangedListener(mListener);
            }
    
            super.onDetachedFromWindow();
        }
    }
    

答案 2 :(得分:0)

根据您需要在CollapsingToolbarLayout上调用方法的documentation

setScrimVisibleHeightTrigger(int)
  

<强> android.support.design:scrimVisibleHeightTrigger

     

指定用于定义何时的可见高度(以像素为单位)   触发稀松布可视性的变化。

对于支持设计库版本:26.1.0