ReColor

Additional

Language
Java
Version
N/A
Created
Dec 15, 2017
Updated
Feb 16, 2018 (Retired)
Owner
SIMMORSAL
Contributor
SIMMORSAL
1
Activity
Badge
Generate
Download
Source code

ReColor

An Android library that tries to do cool stuff with colors.

Usage

Add this to your gradle file:

    implementation 'com.simmorsal.recolor:recolor:1.1.0'

methods

stable:
* setViewBackgroundColor()
* setCardViewColor()
* setTextViewColor()
* setImageButtonColorFilter()
* setImageViewColorFilter()
* setStatusBarColor()
* setNavigationBarColor()
* pulseStatusBar()
* pulseNavigationBar()
* stop()
* getColorIntArray()
* getColorHEXList()
* setOnReColorFinish()

experimental:
* setMenuIconColor()

Explanations:

  • setViewBackgroundColor():

changes the background color of any View you give it:

setViewBackground(view, startingColor, endingColor, duration);

// usage:
ReColor reColor = new ReColor(context);
reColor.setViewBackgroundColor(view, "FFFFFF", "#AA000000", 400);

// or like this:
new ReColor(context).setViewBackgroundColor(view, "#FFFFFF", "AA000000", 400);
  • setCardViewColor():

changes CardView color:

new ReColor(context).setCardViewColor(cardView, startingColor, endingColor, duration);

// usage:
new ReColor(context).setCardViewColor(cardView, "FFFFFF", "000000", 300);
  • setTextViewColor():

changes TextView color:

new ReColor(context).setTextViewColor(textView, startingColor, endingColor, duration);

// usage:
new ReColor(context).setTextViewColor(textView, "FFFFFF", "000000", 300);
  • setImageButtonColorFilter():

changes ImageButton's color filter:

new ReColor(context).setImageButtonColorFilter(imageButton, startingColor, endingColor, duration);

// usage:
new ReColor(context).setImageButtonColorFilter(imageButton, "FFFFFF", "000000", 300);
  • setImageViewColorFilter():

changes ImageView's color filter:

new ReColor(context).setImageViewColorFilter(imageView, startingColor, endingColor, duration);

// usage:
new ReColor(context).setImageViewColorFilter(imageView, "FFFFFF", "000000", 300);
  • setStatusBarColor():

changes Status Bar color. you can pass null as startingColor so it would be automatically retrieved from status bar itself:

new ReColor(context).setStatusBarColor(startingColor, endingColor, duration);

// usage:
new ReColor(context).setStatusBarColor(null, "000000", 300);

// or:

new ReColor(context).setStatusBarColor("FFFFFF", "000000", 300);
  • setNavigationBarColor():

changes Navigation Bar color. like the status bar, you can pass null as startingColor so it would be retrieved automatically:

new ReColor(context).setNavigationBarColor(startingColor, endingColor, duration);

// usage:
new ReColor(context).setNavigationBarColor(null, "000000", 300);

// or

new ReColor(context).setNavigationBarColor("FFFFFF", "000000", 300);
  • pulseStatusBar():

this method pulses the status bar color to the pulseColor, pulseCount times, each pulse taking pulseSpeed milliseconds:

new ReColor(context).pulseStatusBar(pulseColor, pulseSpeed, pulseCount);

//usage:
new ReColor(context).pulseStatusBar("FFFFFF", 100, 4);
  • pulseNavigationBar():

just like pulseStatusBar(), but on Navigation Bar:

new ReColor(context).pulseNavigationBar(pulseColor, pulseSpeed, palseCount);

//usage:
new ReColor(context).pulseNavigationBar("FFFFFF", 150, 5);
  • stop():

this method stops a reColoring on any of the above methods, and also returns the last color set by that particular ReColor object, in any of the above methods:

ReColor reColor = new ReColor(context);
reColor.Stop();

// usage:
// Consider a LinearLayout's background being reColored
ReColor reColor = new ReColor(context)
    .setViewBackgroundColor(linearLayout, "FFFFFF", "000000", 2000);

// now you want to stop reColoring when a button is clicked
// (i also store the returned value)
@OnClick{
    String lastColor = reColor.stop();

    // now i want to use the returned color to start reColoring to a new color
    reColor.setViewBackgroundColor(linearLayout, lastColor, "9C27B0", 500);
}
  • getColorHEXList():

returns a List<String> of HEX color values between startingColor and endingColor with a List length of listLength, so you can use it in your code:

new ReColor(context).getColorHEXList(startingColor, endingColor, listLength);

// usage:
List<String> colorList = new ReColor(context)
    .getColorHEXList("FFFFFF", "000000", 100);
  • getColorIntArray():

returns an int[] of color-int values between startingColor and endingColor with a List length of listLength, so you can use it in your code:

new ReColor(context).getColorIntArray(startingColor, endingColor, listLength);

// usage:
int[] colorList = new ReColor(context)
    .getColorIntArray("FFFFFF", "000000", 100);
  • setOnReColorFinish():

you can implement this on a ReColor object to get notified when reColoring finishes:

ReColor reColor = new ReColor(context);
reColor.setViewBackgroundColor(view, "FFFFFF", "000000", 1000);
reColor.setOnReColorFinish(new OnReColorFinish() {
                                    @Override
                                    public void onFinish() {
                                        Log.i(TAG, "reColoring finished");
                                    }
                                });

// or

new ReColor(context)
    .setViewBackgroundColor(view, "FFFFFF", "000000", 1000)
    .setOnReColorFinish(new OnReColorFinish() {
                                    @Override
                                    public void onFinish() {
                                        Log.i(TAG, "reColoring finished");
                                    }
                                });

Experimental methods:

  • setMenuIconColor():

changes MenuIcon of a MenuItem color:

    new ReColor(context).setMenuIconColor(menuItem, startingColor, endingColor, duration);

this method is experimental because while it's reColoring a MenuIcon, the menu becomes unresponsive to touch. So the best way to use it is to give it a duration of 200 or less. and if you're simulating pulsing, wait a bit before the next pulse begins. this is my implementation of pulsing:

MenuItem menuItem = navigationBarMenu.getItem(0);
final String startColor = "c60055", endColor = "40c4ff";

Handler handler = new Handler().post(new Runnable() {
             @Override
             public void run() {

                 new ReColor().setMenuIconColor(menuItem, startColor, endColor, 100)
                         .setOnReColorFinish(new OnReColorFinish() {
                             @Override
                             public void onFinish() {

                                 new ReColor().setMenuIconColor(menuItem, endColor, startColor, 100)
                                         .setOnReColorFinish(new OnReColorFinish() {
                                             @Override
                                             public void onFinish() {
                                                 handler.postDelayed(this, 1500);
                                             }
                                         });
                             }
                         });
             }
         };
}

Important notes

  • ONLY reColor one widget per object of ReColor class. In other words, DO NOT create one object of ReColor class and use it to reColor multiple widgets - at least at the same time.

  • you can pass color values in any of the following formats: "RRGGBB" - "AARRGGBB" - "#RRGGBB" - "#AARRGGBB"