三千码友在身旁

android 颜色错乱 缓存?才不是捏

2019-11-10  本文已影响0人  一个冬季
参考文章

drawable xml背景颜色错乱

问题描述

我在xml里面对button按钮设置的颜色是橘色,预览效果也是非常的正常,但是但是正式跑代码到手机的时候却变成了红色

找到问题点

原来我一直在首页有监听列表滚动的距离,通过距离来修改颜色的值

...省略
 <TextView
        android:id="@+id/tv_heade_number"
        android:layout_width="@dimen/dp_20"
        android:layout_height="@dimen/dp_20"
        android:layout_marginRight="@dimen/dp_9"
        android:background="@drawable/shape_rectangle_solid_appthemecolor_corner50"
        android:gravity="center"
        android:textColor="@color/white"
        android:textSize="@dimen/sp_10"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

如上所示我使用了background="@drawable/shape_rectangle_solid_appthemecolor_corner50"

 refreshRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
               ...省略
                if (alpha >= 1) alpha = 1;   //[0,1]
                int bgAlpha = (int) (alpha * 255);
                searchTitleFrameLayout.getBackground().setAlpha(bgAlpha);
                //修改数字的颜色值
                GradientDrawable gradientDrawable = (GradientDrawable) tvTitleSeachNoticeNum.getBackground();
                if (alpha == 0) {
                    gradientDrawable.setColor(Color.rgb(RED_tvTitleNumBack_R, RED_tvTitleNumBack_G, RED_tvTitleNumBack_B));
                    tvTitleSeachNoticeNum.setTextColor(Color.rgb(WHI_tvTitleNumBack_R, WHI_tvTitleNumBack_G, WHI_tvTitleNumBack_B));
                } else if (alpha == 1) {
                 //修改数字的颜色值
                    gradientDrawable.setColor(Color.rgb(WHI_tvTitleNumBack_R, WHI_tvTitleNumBack_G, WHI_tvTitleNumBack_B));
                    tvTitleSeachNoticeNum.setTextColor(Color.rgb(RED_tvTitleNumBack_R, RED_tvTitleNumBack_G, RED_tvTitleNumBack_B));
                } else {
                    int Change_tvTitleNumBack_R = (int) (distance_R * alpha);
                    int Change_tvTitleNumBack_G = (int) (distance_G * alpha);
                    int Change_tvTitleNumBack_B = (int) (distance_B * alpha);
                    gradientDrawable.setColor(Color.rgb(RED_tvTitleNumBack_R + Change_tvTitleNumBack_R, RED_tvTitleNumBack_G + Change_tvTitleNumBack_G, RED_tvTitleNumBack_B + Change_tvTitleNumBack_B));
                    tvTitleSeachNoticeNum.setTextColor(Color.rgb(WHI_tvTitleNumBack_R - Change_tvTitleNumBack_R, WHI_tvTitleNumBack_G - Change_tvTitleNumBack_G, WHI_tvTitleNumBack_B - Change_tvTitleNumBack_B));
                }
            }
        });

我通过 GradientDrawable gradientDrawable = (GradientDrawable) tvTitleSeachNoticeNum.getBackground();获取到GradientDrawable 并修改Color的值,这种修改是全局的修改,会影响到资源文件。所以导致了所有关于shape_rectangle_solid_appthemecolor_corner50.xml文件的color都会更改

解决办法

复制一份shape_rectangle_solid_appthemecolor_corner50.xml,改名为forgradient_shape_rectangle_solid_appthemecolor_corner50.xml

上一篇 下一篇

猜你喜欢

热点阅读