android 颜色错乱 缓存?才不是捏
2019-11-10 本文已影响0人
一个冬季
参考文章
问题描述
我在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