LayerDrawable 一起变化

Posted

技术标签:

【中文标题】LayerDrawable 一起变化【英文标题】:LayerDrawable change together 【发布时间】:2017-06-21 01:48:12 【问题描述】:

我有一个魔法问题。 LayerDrawable 的所有实例一起更改。 我有几个典型的观点。因此,为了完成我的任务,我决定“我将使用“复合视图”。我遇到了一个问题:当我更改可绘制图层的可见性时

public abstract class BaseContentExpanded<DATA> extends FrameLayout implements ExpandableLayout.AdditionalAnimators 

 // same not imprtand code

 @Override
public List<? extends Animator> getAnimators(final boolean togle) 

    final Drawable showDrawable;
    final Drawable hideDraawable;
    final LayerDrawable layerDrawable = (LayerDrawable) vStateSelectionIcon.getDrawable();


    if (togle) 
        showDrawable = layerDrawable.getDrawable(0);
        hideDraawable = layerDrawable.getDrawable(isCanExpand ? 1 : 2);
     else 
        hideDraawable = layerDrawable.getDrawable(0);
        showDrawable = layerDrawable.getDrawable(isCanExpand ? 1 : 2);
    


    ValueAnimator expandAnimator = ValueAnimator.ofFloat(0f, 1f);
    expandAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() 
        @Override
        public void onAnimationUpdate(ValueAnimator animation) 
            Log.d(TAG, "getAnimators: " + layerDrawable);
            float currentExpandAnimationValue = (float) animation.getAnimatedValue();
            showDrawable.setAlpha((int) (255 * currentExpandAnimationValue));
            hideDraawable.setAlpha((int) (255 * (1 - currentExpandAnimationValue)));
        
    );


    return Arrays.asList(expandAnimator);

LayerDrawable 的 xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
	<item>
		<bitmap android:src="@drawable/ic_close_light"/>
	</item>


	<item
		android:drawable="@drawable/vector_ic_arrow_down_blue_stroke_24dp"/>

	<item
		android:drawable="@drawable/vector_ic_arrow_right_blue_24dp"/>


</layer-list>

布局

        <LinearLayout
        android:layout_
        android:layout_
        android:divider="@drawable/line_divider"
        android:orientation="vertical"
        android:showDividers="middle"
        >

        <com.learnx.android.ui.view.filters.LocationFilter
            android:id="@+id/location"
            android:layout_
            android:layout_
            />

        <com.learnx.android.ui.view.filters.RatingFilter
            android:id="@+id/rating"
            android:layout_
            android:layout_
            />
    </LinearLayout>

如果有任何帮助,我将不胜感激。

【问题讨论】:

【参考方案1】:

我犯了错误。我忘记调用 mutate();

final LayerDrawable layerDrawable = (LayerDrawable) vStateSelectionIcon.getDrawable();
    LayerDrawable copyDrawable = (LayerDrawable) layerDrawable.mutate();

【讨论】:

以上是关于LayerDrawable 一起变化的主要内容,如果未能解决你的问题,请参考以下文章

自定义设计文本框

LayerDrawable 移除一个图层

用LayerDrawable实现两个图片的叠加效果

android使用代码生成LayerDrawable的方法源码分析和注意事项

LayerDrawable:这可以更有效地完成吗?

Android Drawable 详解