开发问题小结

1、getBackground().setAlpha()引发的布局文件颜色改变

当对一个View的背景进行透明度进行改变的时候,如果直接用getBackground().setAlpha()会发现项目里其它布局背景颜色也会发生变化,这是因为从同一个资源文件中加载出来的drawable会共享状态,如果加载出来多个drawable,当改变了其中一个的状态时,其他drawable的状态也会相应改变。
如果想直接对View的背景进行透明度进行设置,可以调用drabable的mutate()方法,mutate()方法的作用是让这个draw变成一个可变的drawable,如果这个drawable纪念性mutate设置之后,这个drawable就不会与其他同资源drawable共享状态,但是有一点需要注意,mutate是不可逆转的。

2、三方SDK的初始化

由于涉及到多进程,因此在Application里对当前进程进行了判断,但是初期只是判断了当前进程的话进行一系列三方SDK的初始化,因为造成了阿里云等一些需要在单独进程里初始化的操作报错,这里需要注意如果三方SDK涉及到了单开进程,需要在它需要的进程下进行初始化操作,不要全部放到当前进程下初始化所有数据。

3、Immutable bitmap passed to Canvas constructor 异常

这是在使用BitmapFactory.decodeResource(Resources res, int id)创建bitmap时经常会遇到的问题,这是由于android不允许直接对drawable目录中的图片进行修改的,而直接通过该函数创建出来的Bitmap对象,具有直接修改图片资源的能力。只能通过拷贝一个id参数所对应图片资源的副本来创建Bitmap。因此在后面再调用copy(Config config, boolean isMutable)函数来拷贝出一个副本就行了。例如:
错误代码:

Resources res = getResources();
Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.bg_image);

正确代码:

Resources res = getResources();
Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.bg_image).copy(Bitmap.Config.ARGB_8888, true);

猜你喜欢

转载自blog.csdn.net/mixin716/article/details/79299515