рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рддреНрд╡рдЪрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдпрд╛ рдПрдХ рдХреНрд▓рд┐рдХ рдореЗрдВ рд░рдВрдЧ рдпреЛрдЬрдирд╛ рдХреЛ рдмрджрд▓рдирд╛

рд╕рднреА рд╣реИрдмреНрд░рдЪрд┐рдпрдВрд╕ рдХреЛ рдмрдзрд╛рдИ!

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк, рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ, рдПрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдФрд░ рдЖрдкрдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рдХрд╛рд░реНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ: рдПрдХ рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рдХреА рд░рдВрдЧ рдпреЛрдЬрдирд╛ рдмрджрд▓реЗрдВред рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓ рдХрд╛ рддрдерд╛рдХрдерд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

рдХрд╛рд░реНрдп

рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рдмрдирд╛рдПрдВ, рд╕рд╛рде рд╣реА рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЦрд╛рд▓ рдмрджрд▓реЗрдВред

рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рдЪрд╛рд░

рдЧрддрд┐рд╡рд┐рдзрд┐ рдмрдирд╛рддреЗ рд╕рдордп, рд╕рд┐рд╕реНрдЯрдо рдкрд╣рд▓реЗ xml рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрдм рдпрд╣ рдорд╛рд░реНрдХрдЕрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ рддреЛ рд▓рдЧрд╛рддрд╛рд░ overResid getResources () рд╡рд┐рдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рдХрдбрд╝реА рдореЗрдВ рдареАрдХ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рди рдХрд┐ рдпрд╣ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдЪрд╛рд▓ рдХреЛ рдиреЛрдЯ рдХрд┐рдП рдмрд┐рдирд╛, рд╕рд┐рд╕реНрдЯрдо рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред рдФрд░ рдпрд╣ рд╡рд╣реА рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдВрдЧрд╛ рд╣реИред

рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди

рдкреВрд░реНрд╡рдЧрд╛рдореА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

1) рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ, рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдВрдХ (рдЬреИрд╕реЗ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд) рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИред рдЦреИрд░, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдбреНрд░реЙрдмрд▓ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд░рдВрдЧреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
android:background="@color/color_tabbar_background" 

2) рдмреЗрд╕ рдХреНрд▓рд╛рд╕ BasicActivity рдмрдирд╛рдПрдВ, рдЬреЛ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рдФрд░ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдорд╛рд░реА рд╕рд╛рд░реА рдПрдХреНрдЯрд┐рд╡рд┐рдЯреАрдЬ рдЗрдирд╣реЗрд░рд┐рдЯ рд╣реЛрдВ, рдЗрд╕рдореЗрдВ getResources () рдореЗрдердб рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВред

3) рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЪрд▓реЛ рдЗрд╕реЗ рд░реЗрд╕реЛрд░реНрд╕рдореИрдирдЬрд░ рдХрд╣рддреЗ рд╣реИрдВ, рдЬреЛ рд░рд┐рд╕реЛрд░реНрд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред

рдЖрдЗрдП рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ getResources () рдкрджреНрдзрддрд┐ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдпрд╣ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдПрдХ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдкрдиреЗ рдореВрд▓рднреВрдд рд╕рдХреНрд░рд┐рдпрддрд╛ рд╡рд░реНрдЧ рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ redefined рд╡рд┐рдзрд┐ getResources () рдореЗрдВ рдХреМрди рд╕рд╛ рд╡рд┐рд╖рдп рд╡рд░реНрддрдорд╛рди рд╣реИ рдФрд░ рдХреНрдпрд╛ рдпрд╣ рд╕рднреА рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдлрд┐рд░ рд░реЗрд╕рд╛рд░реНрдЯрдореИрди рдХреНрд▓рд╛рд╕ рдХрд╛ рдЕрдкрдирд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВред рдпрд╣рд╛рдБ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдореВрдирд╛ рдХреЛрдб рд╣реИ

 public class BasicActivity extends Activity { private ResourceManager manager = null; @Override public Resources getResources() { if (App.checkCurrentSkin()) { if (manager == null) { manager = new ResourceManager(super.getResources()); } return manager; } else return super.getResources(); } } 

рдпрд╣ рд╕рдм рдЖрдкрдХреЛ рдмреБрдирд┐рдпрд╛рджреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдм рд╣рдорд╛рд░реЗ ResourseManager рдкрд░ рдЬрд╛рдПрдВред рдЗрд╕рдореЗрдВ, рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╕рд╛рде рд╣реА рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐рдпреЛрдВ getColor (int id), loadDrawable (TypedValue value, int id), getColorStateList (int id) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкрд┐рдЫрд▓реЗ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рдореЗрдВ рдЫреЛрдЯреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ - рд╡реЗ рдмреИрдЪ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдирдХреА рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, JAVA рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ! рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдирд╣реАрдВ рдмрддрд╛рдКрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реИред рдмрд╕ рдЖрдкрдХреЛ рдПрдХ рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП рдХреЛрдб рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
 public class ResourceManager extends Resources { Skin mSkin = App.getCurrentSkin(); Method loadDrawable; Method loadColorStateList; Resources mBaseResources; public ResourceManager(Resources baseResources) { super(baseResources.getAssets(), baseResources.getDisplayMetrics(), baseResources.getConfiguration()); mBaseResources = baseResources; Method[] methods = Resources.class.getDeclaredMethods(); for (Method method : methods) { if (method.getName().equals("loadDrawable")) { loadDrawable = method; loadDrawable.setAccessible(true); } else if (method.getName().equals("loadColorStateList")) { loadColorStateList = method; loadColorStateList.setAccessible(true); } } } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдордиреЗ рдЙрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреА рд╣реИ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдм рдпрд╣ рдорд╛рдорд▓рд╛ рдЫреЛрдЯреЗ рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ, рдЗрд╕рдХреА рдЖрдИрдбреА рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрд╕рд╛рдзрди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рджреВрд╕рд░рд╛ рд▓реМрдЯрд╛рдПрдВред рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ, рдЖрдк рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реНрдХрд┐рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдЧрддрд┐рд╢реАрд▓ рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рдЙрдирдХреЗ рд░рдВрдЧреЛрдВ рдХреЗ рдЕрд░реНрде рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рдпрд╣рд╛рдБ рд╡рд┐рдзрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИ
 @Override public int getColor(int id) throws NotFoundException { String color; switch (id) { case R.color.chat_in: color = mSkin.getControlWithType(SkinConstants.SKIN_CONTROL_RECEIVE_MESSAGE_BUBLE).getBackgroundColor(); //    #b7c0c7 return Color.parseColor(color); case R.color.chat_send: color = mSkin.getControlWithType(SkinConstants.SKIN_CONTROL_SEND_MESSAGE_BUBLE).getBackgroundColor(); return Color.parseColor(color); тАж. 

рдЕрдЧрд▓реА рд╡рд┐рдзрд┐
 public Drawable loadDrawable(TypedValue value, int id) { Drawable d = null; String color; String colorSel; GradientDrawable result; switch (value.resourceId) { case R.color.color_background_main: color = mSkin.getControlWithType(SkinConstants.SKIN_CONTROL_VIEW).getBackgroundColor(); return new ColorDrawable(Color.parseColor(color)); case R.drawable.button_blue_selector: color = mSkin.getControlWithType(SkinConstants.SKIN_CONTROL_BUTTON_BLUE).getBackgroundColor(); colorSel = mSkin.getControlWithType(SkinConstants.SKIN_CONTROL_BUTTON_BLUE).getHighlightedBackgroundColor(); return createSelector(Color.parseColor(color), getDarkerColor(color), colorSel); case R.drawable.chat_in: color = mSkin.getControlWithType(SkinConstants.SKIN_CONTROL_RECEIVE_MESSAGE_BUBLE).getBackgroundColor(); result = new GradientDrawable(Orientation.TOP_BOTTOM, new int[]{Color.parseColor(color), Color.parseColor(color)}); result.setCornerRadius(25); return result; case R.drawable.list_view_selector: colorSel = mSkin.getControlWithType(SkinConstants.SKIN_CONTROL_TABLE_VIEW_CELL) .getHighlightedBackgroundColor(); ColorDrawable drawable = new ColorDrawable(Color.parseColor(colorSel)); StateListDrawable listDrawable = new StateListDrawable(); listDrawable.addState(new int[]{android.R.attr.state_pressed}, drawable); return listDrawable; case R.drawable.button_last_menu_selector: color = mSkin.getControlWithType(SkinConstants.SKIN_CONTROL_TABLE_VIEW_CELL).getBackgroundColor(); colorSel = mSkin.getControlWithType(SkinConstants.SKIN_CONTROL_TABLE_VIEW_CELL) .getHighlightedBackgroundColor(); return createSelectorForDifferentCorers(Color.parseColor(color), getDarkerColor(color), colorSel, 0, 0, 15, 15); default: break; } try { d = (Drawable) loadDrawable.invoke(mBaseResources, value, id); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return d; } 

рдФрд░ рдЖрдЦрд┐рд░реА
 @Override public ColorStateList getColorStateList(int id) throws NotFoundException { String color; String colorSel; ColorStateList res; switch (id) { case R.drawable.tab_text_selector: color = mSkin.getControlWithType(SkinConstants.SKIN_CONTROL_TABBAR_ITEM).getTextColor(); colorSel = mSkin.getControlWithType(SkinConstants.SKIN_CONTROL_TABBAR_ITEM).getHighlightedTextColor(); res = new ColorStateList(new int[][]{new int[]{android.R.attr.state_selected}, new int[]{-android.R.attr.state_selected}}, new int[]{Color.parseColor(colorSel), Color.parseColor(color)}); return res; default: break; } return super.getColorStateList(id); } 


рдЗрд╕ рдХреЛрдб рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рд╕рднреА рдбреНрд░рд╛рдмрд▓реНрд╕ рдмрдирд╛рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

 private Drawable createSelectorForDifferentCorers(int startColor, int endColor, String colorSel, float topLeft, float topRight, float bottomRight, float bottomLeft) { StateListDrawable drawable = new StateListDrawable(); GradientDrawable gradientDrawable1 = new GradientDrawable(Orientation.TOP_BOTTOM, new int[]{startColor, endColor}); GradientDrawable gradientDrawable2 = new GradientDrawable(Orientation.TOP_BOTTOM, new int[]{ Color.parseColor(colorSel), getDarkerColor(colorSel)}); gradientDrawable1.setShape(GradientDrawable.RECTANGLE); gradientDrawable1.setCornerRadii(new float[]{topLeft, topLeft, topRight, topRight, bottomRight, bottomRight, bottomLeft, bottomLeft}); gradientDrawable1.setStroke(1, endColor); gradientDrawable2.setShape(GradientDrawable.RECTANGLE); gradientDrawable2.setCornerRadii(new float[]{topLeft, topLeft, topRight, topRight, bottomRight, bottomRight, bottomLeft, bottomLeft}); gradientDrawable2.setStroke(1, endColor); drawable.addState(new int[]{android.R.attr.state_pressed}, gradientDrawable2); drawable.addState(new int[]{android.R.attr.state_checked}, gradientDrawable2); drawable.addState(new int[]{-android.R.attr.state_selected}, gradientDrawable1); return drawable; } 


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдкрдХреА рдХрд▓реНрдкрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рдЙрдбрд╝рд╛рдиред
рдореИрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдкрд░ рддреБрд░рдВрдд рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЬрдЯрд┐рд▓ рдЪрд┐рддреНрд░ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреИрдм рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдЗрдХрди, рддреЛ рдЖрдк рдЕрдкрдиреЗ рд░рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдХрди рдХреЗ рд▓рд┐рдП рдЪрд┐рддреНрд░ рд╢реБрджреНрдз рд╕рдлреЗрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕реЗ рдЙрд╕ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдПрдВрдЧреЗ рдЬреЛ рд╣рдореЗрдВ рд░рдВрдЧ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдХреЗ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рд╣рдореЗрдВ рд╡рд╣ рдЪрд┐рддреНрд░ рд░рдВрдЧ рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
 Drawable example = ImageManager.blendColorDrawable(this, R.drawable.arrow, R.color.color_2_end); 

рдФрд░ рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрдо рд╕реЗ рдХрдо рдЯреИрдм рдкрд░ рдПрдХ рдЖрдЗрдХрди рдбрд╛рд▓реЗрдВред
 public static Drawable blendColorDrawable(Context context, int baseId, int colorId) { Resources res = context.getResources(); BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredConfig = Bitmap.Config.ARGB_8888; Bitmap base = BitmapFactory.decodeResource(res, baseId, options); Bitmap blend = Bitmap.createBitmap(base.getWidth(), base.getHeight(), Config.ARGB_8888); blend.eraseColor(context.getResources().getColor(colorId)); Bitmap result = base.copy(Config.ARGB_8888, true); Paint p = new Paint(); p.setXfermode(new PorterDuffXfermode(Mode.MULTIPLY)); p.setShader(new BitmapShader(blend, TileMode.CLAMP, TileMode.CLAMP)); Canvas c = new Canvas(); c.setBitmap(result); c.drawBitmap(base, 0, 0, null); c.drawRect(0, 0, base.getWidth(), base.getHeight(), p); return new BitmapDrawable(context.getResources(), result); 


рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛, рдЬрд╣рд╛рдВ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ!

рдкреБрдирд╢реНрдЪ рдпрд╛рдж рд░рдЦреЗрдВ, рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдЕрджреНрдпрддрди: рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рддрд░реАрдХрд╛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЦрд╛рд▓ (рдереАрдо) рд╣реИрдВ - рдпреЗ рдЧрддрд┐рд╢реАрд▓ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдЧреНрд░рд┐рдо рдореЗрдВ xml рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/In165787/


All Articles