Android Open Source - android-gskbyte-utils Auto Background Button






From Project

Back to project page android-gskbyte-utils.

License

The source code is released under:

GNU Lesser General Public License

If you think the Android project android-gskbyte-utils listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package org.gskbyte.view;
/*from w w  w . j a v a  2  s . c  o m*/
import org.gskbyte.R;
import org.gskbyte.drawable.AutoBackgroundButtonDrawable;

import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.util.AttributeSet;
import android.widget.Button;

/**
 * Applies a pressed state color filter or disabled state alpha for the button's
 * background drawable.
 * 
 * @see Original implementation: https://github.com/shiki/android-autobgbutton
 * 
 * This extension enables customization of the filter color and allows to apply it to the side drawables and the text itself.
 * By default, if no background is enabled, it is set to null.
 * 
 * @author shiki
 * @author Jose Alcal Correa
 */
public class AutoBackgroundButton
extends Button
{

protected int filterColor;
protected boolean applyFilterToDrawables, applyFilterToText;

protected boolean filterColorLoaded = false;

public AutoBackgroundButton(Context context, AttributeSet attrs)
{
    super(context, attrs, 0); // setting the third attribute to 0 removes default button BG
    setClickable(true);
    initAttributes(context, attrs);
}

public AutoBackgroundButton(Context context, AttributeSet attrs, int defStyle)
{
    super(context, attrs, defStyle);
    initAttributes(context, attrs);
}

protected void initAttributes(Context context, AttributeSet attrs)
{
    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.org_gskbyte_view_AutoBackgroundButton);
    this.filterColor = a.getColor(R.styleable.org_gskbyte_view_AutoBackgroundButton_filterColor, AutoBackgroundButtonDrawable.DEFAULT_COLOR_FILTER);
    filterColorLoaded = true;
    setBackgroundDrawable( getBackground() );
    
    boolean applyDrawables = a.getBoolean(R.styleable.org_gskbyte_view_AutoBackgroundButton_applyFilterToDrawables, false);
    setApplyFilterToDrawables(applyDrawables);

    boolean applyText = a.getBoolean(R.styleable.org_gskbyte_view_AutoBackgroundButton_applyFilterToText, false);
    setApplyFilterToText(applyText);
    
    a.recycle();
}

public int getFilterColor()
{ return this.filterColor; }

public void setFilterColor(int filterColor)
{
    this.filterColor = filterColor;
    
    setBackgroundDrawable( getBackground() );
    setApplyFilterToDrawables( this.applyFilterToDrawables );
    setApplyFilterToText( this.applyFilterToText );
}

public boolean appliesFilterToDrawables()
{ return this.applyFilterToDrawables; }

public void setApplyFilterToDrawables(boolean apply)
{
    this.applyFilterToDrawables = apply;
    
    Drawable[] d = getCompoundDrawables();
    setCompoundDrawables(d[0], d[1], d[2], d[3]);
}

public boolean appliesFilterToText()
{ return this.applyFilterToText; }

private ColorStateList originalTextColors = null;
public void setApplyFilterToText(boolean apply)
{
    this.applyFilterToText = apply;

    // should take color from state list
    if(originalTextColors == null) {
        originalTextColors = getTextColors();
    }
    final int defaultTextColor = originalTextColors.getDefaultColor();
    if(apply) {
        final int [][] states = new int[][] {
                new int[] {android.R.attr.state_enabled, android.R.attr.state_pressed},  // pressed state
                new int[] {} // default state
        };
        final int [] color_values = {
                filterColor, defaultTextColor
        };
        
        setTextColor( new ColorStateList(states, color_values) );
    } else {
        setTextColor( originalTextColors );
    }
}


@Override
public void setBackground(Drawable d)
{
    setBackgroundDrawable(d);
}

@SuppressWarnings("deprecation")
@Override
public void setBackgroundDrawable(Drawable d)
{
    // Replace the original background drawable (e.g. image) with a
    // LayerDrawable that contains the original drawable.
    super.setBackgroundDrawable( filteredDrawable(d, true) );
}

@Override
public void setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)
{
    super.setCompoundDrawables(
            filteredDrawable(left, applyFilterToDrawables),
            filteredDrawable(top, applyFilterToDrawables),
            filteredDrawable(right, applyFilterToDrawables),
            filteredDrawable(bottom, applyFilterToDrawables)
            );
    
}

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public void setCompoundDrawablesRelative(Drawable left, Drawable top, Drawable right, Drawable bottom)
{
    super.setCompoundDrawablesRelative(
            filteredDrawable(left, applyFilterToDrawables),
            filteredDrawable(top, applyFilterToDrawables),
            filteredDrawable(right, applyFilterToDrawables),
            filteredDrawable(bottom, applyFilterToDrawables)
            );
}

private final Drawable filteredDrawable(Drawable d, boolean extraCondition)
{
    if( d!=null && filterColorLoaded && extraCondition && !(d instanceof AutoBackgroundButtonDrawable) ) {
        return new AutoBackgroundButtonDrawable(d, filterColor);
    } else {
        return d;
    }
}

}




Java Source Code List

com.woozzu.android.widget.IndexScroller.java
com.woozzu.android.widget.IndexableListView.java
org.gskbyte.FragmentWrapperActivity.java
org.gskbyte.animation.ExpandAnimation.java
org.gskbyte.bitmap.AbstractBitmapManager.java
org.gskbyte.bitmap.BitmapColorizer.java
org.gskbyte.bitmap.BitmapManager.java
org.gskbyte.bitmap.CachedBitmapColorizer.java
org.gskbyte.bitmap.IndexedBitmaps.java
org.gskbyte.bitmap.LRUBitmapCache.java
org.gskbyte.bitmap.LRUBitmapManager.java
org.gskbyte.bitmap.PrivateBitmapManager.java
org.gskbyte.bitmap.ReferencedBitmaps.java
org.gskbyte.collection.ArrayHashMap.java
org.gskbyte.collection.DoubleSparseArray.java
org.gskbyte.collection.ListHashMap.java
org.gskbyte.dialog.DownloadDialogFragment.java
org.gskbyte.dialog.LoadDialogFragment.java
org.gskbyte.dialog.OpenLinkDialogBuilder.java
org.gskbyte.dialog.PickerDialogFragment.java
org.gskbyte.download.DiskDownload.java
org.gskbyte.download.DownloadManager.java
org.gskbyte.download.Download.java
org.gskbyte.download.MemoryDownload.java
org.gskbyte.drawable.AutoBackgroundButtonDrawable.java
org.gskbyte.listener.IListenable.java
org.gskbyte.listener.ListenableNG.java
org.gskbyte.listener.Listenable.java
org.gskbyte.preferences.DialogSeekBarPreference.java
org.gskbyte.preferences.InlineSeekBarPreference.java
org.gskbyte.remote.AsyncURLRequest.java
org.gskbyte.remote.URLRequest.java
org.gskbyte.tasks.QueuedTaskExecutor.java
org.gskbyte.tasks.TaskStep.java
org.gskbyte.tasks.Task.java
org.gskbyte.ui.ArrayAdapterWithDefaultValue.java
org.gskbyte.ui.ListAdapter.java
org.gskbyte.ui.ColorDialog.ColorDialog.java
org.gskbyte.ui.ColorDialog.ColorPreference.java
org.gskbyte.ui.iconifiedMainMenuList.EntryView.java
org.gskbyte.ui.iconifiedMainMenuList.MainMenuAdapter.java
org.gskbyte.ui.iconifiedMainMenuList.MenuEntry.java
org.gskbyte.util.FrequentIntents.java
org.gskbyte.util.IOUtils.java
org.gskbyte.util.Logger.java
org.gskbyte.util.OpenFileHandlerFactory.java
org.gskbyte.util.OpenFileHandler.java
org.gskbyte.util.XmlUtils.java
org.gskbyte.view.AsyncImageView.java
org.gskbyte.view.AutoBackgroundButton.java
org.gskbyte.view.AutoBackgroundImageButton.java
org.gskbyte.view.AutoHeightImageView.java
org.gskbyte.view.ExpandedGridView.java
org.gskbyte.view.ExpandedListView.java
org.gskbyte.view.FontUtil.java
org.gskbyte.view.FontableButton.java
org.gskbyte.view.FontableCheckBox.java
org.gskbyte.view.FontableEditText.java
org.gskbyte.view.FontableTextView.java
org.gskbyte.view.FullWidthImageView.java
org.gskbyte.view.ProportionalHeightLayout.java
org.gskbyte.view.PullToRefreshListView.java
org.gskbyte.view.SquaredLayout.java
org.gskbyte.view.StepSeekBar.java
org.gskbyte.view.TextViewUtil.java
org.gskbyte.view.ViewUtils.java