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

参考文章

drawable xml背景颜色错乱

问题描述

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

找到问题点

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

...省略
 

如上所示我使用了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

你可能感兴趣的:(android 颜色错乱 缓存?才不是捏)