解决 setProgressDrawableTiled 版本兼容性问题,在旧版本中 只能通过xml设置 android:progressDrawable来实现 layer-list布局,代码直接设置setProgressDrawable无效,因为在这个之前还调用了一个私有方法tileify。新的版本中已经有setProgressDrawableTiled()可直接进行代码设置android:progressDrawable所指向的属性了
参数 resId是一个 layer-list 布局xml
public static void setProgressDrawable(@NonNull RatingBar ratingBar, @DrawableRes int resId) {
Drawable layerDrawable = ratingBar.getResources().getDrawable(resId);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
Drawable d = getMethod("tileify", ratingBar, new Object[]{layerDrawable, false});
ratingBar.setProgressDrawable(d);
} else {
ratingBar.setProgressDrawableTiled(layerDrawable);
}
}
private static Drawable getMethod(String MethodName, Object o, Object[] paras) {
Drawable newDrawable = null;
try {
Class c[] = new Class[2];
c[0] = Drawable.class;
c[1] = boolean.class;
Method method = ProgressBar.class.getDeclaredMethod(MethodName, c);
method.setAccessible(true);
newDrawable = (Drawable) method.invoke(o, paras);
} catch (Exception ex) {
ex.printStackTrace();
}
return newDrawable;
}