Android Open Source - holoaccent Spinner Drawable






From Project

Back to project page holoaccent.

License

The source code is released under:

Apache License

If you think the Android project holoaccent 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 com.negusoft.holoaccent.drawable;
/*w w w. ja v a  2 s.c  om*/
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.DisplayMetrics;
import android.util.TypedValue;

public class SpinnerDrawable extends Drawable {

  private static final float LINE_WIDTH_DP = 0.5f;
  private static final float TRIANGLE_SIDE_DP = 12f;
  private static final float VERTICAL_OFFSET_DP = 4f;
  private static final float AB_BOTTOM_MARGIN_DP = 2f;
  
  public enum Type { DEFAULT, DEFAULT_INVERSE, ACTIONBAR, ACTIONBAR_INVERSE };

  private final SpinnerConstantState mState;
  private final Paint mPaint;
  
  public SpinnerDrawable(Resources res, int color, Type type) {
    DisplayMetrics metrics = res.getDisplayMetrics();
    mState = new SpinnerConstantState(metrics, color, type);
    mPaint = initPaint(color);
  }
  
  SpinnerDrawable(DisplayMetrics metrics, int color, Type type) {
    mState = new SpinnerConstantState(metrics, color, type);
    mPaint = initPaint(color);
  }
  
  private Paint initPaint(int fillColor) {
    if (Color.alpha(fillColor) == 0)
      return null;
    
        Paint result = new Paint();
    result.setColor(fillColor);
    result.setStyle(Paint.Style.FILL);
    result.setAntiAlias(true);
    return result;
  }

  @Override
  public void draw(Canvas canvas) {
    Path path = getPath(getBounds(), mState.mType);
    canvas.drawPath(path, mPaint);
  }
  
  private Path getPath(Rect bounds, Type type) {
    switch (type) {
    case DEFAULT:
      return getPathDefault(bounds);
    case DEFAULT_INVERSE:
      return getPathDefaultInverse(bounds);
    case ACTIONBAR:
      return getPathActionbar(bounds);
    case ACTIONBAR_INVERSE:
      return getPathActionbarInverse(bounds);
    default:
      return getPathDefault(bounds);
    }
  }

  private Path getPathDefault(Rect bounds) {
    float lineWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, LINE_WIDTH_DP, mState.mDisplayMetrics);
    float triangleSide = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, TRIANGLE_SIDE_DP, mState.mDisplayMetrics);
    float verticalOffset = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, VERTICAL_OFFSET_DP, mState.mDisplayMetrics);

    float hLeft = bounds.left;
    float hRight = bounds.right + triangleSide;
    float hCenter = bounds.right;
    
    float vBottom = bounds.bottom + verticalOffset;
    float vTop = vBottom - triangleSide;
    float vCenter = vBottom - lineWidth;
    
    Path result = new Path();
    //start from the top corner and go down
    result.moveTo(hRight, vTop);
    result.lineTo(hRight, vBottom);
    result.lineTo(hLeft, vBottom);
    result.lineTo(hLeft, vCenter);
    result.lineTo(hCenter, vCenter);
    result.close();
    
    return result;
  }

  private Path getPathDefaultInverse(Rect bounds) {
    float lineWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, LINE_WIDTH_DP, mState.mDisplayMetrics);
    float triangleSide = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, TRIANGLE_SIDE_DP, mState.mDisplayMetrics);
    float verticalOffset = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, VERTICAL_OFFSET_DP, mState.mDisplayMetrics);

    float hLeft = bounds.left - triangleSide;
    float hRight = bounds.right;
    float hCenter = bounds.left;
    
    float vBottom = bounds.bottom + verticalOffset;
    float vTop = vBottom - triangleSide;
    float vCenter = vBottom - lineWidth;
    
    Path result = new Path();
    //start from the top corner and go down
    result.moveTo(hLeft, vTop);
    result.lineTo(hLeft, vBottom);
    result.lineTo(hRight, vBottom);
    result.lineTo(hRight, vCenter);
    result.lineTo(hCenter, vCenter);
    result.close();
    
    return result;
  }

  private Path getPathActionbar(Rect bounds) {
    float triangleSide = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, TRIANGLE_SIDE_DP, mState.mDisplayMetrics);
    float margin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, AB_BOTTOM_MARGIN_DP, mState.mDisplayMetrics);

    float left = bounds.right;
    float right = bounds.right + triangleSide;
    float bottom = bounds.bottom - margin;
    float top = bottom - triangleSide;
    
    Path result = new Path();
    //start from the top corner and go down
    result.moveTo(right, top);
    result.lineTo(right, bottom);
    result.lineTo(left, bottom);
    result.close();
    
    return result;
  }

  private Path getPathActionbarInverse(Rect bounds) {
    float triangleSide = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, TRIANGLE_SIDE_DP, mState.mDisplayMetrics);
    float margin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, AB_BOTTOM_MARGIN_DP, mState.mDisplayMetrics);

    float left = bounds.left - triangleSide;
    float right = bounds.left;
    float bottom = bounds.bottom - margin;
    float top = bottom - triangleSide;
    
    Path result = new Path();
    //start from the top corner and go down
    result.moveTo(left, top);
    result.lineTo(left, bottom);
    result.lineTo(right, bottom);
    result.close();
    
    return result;
  }

  @Override
  public int getOpacity() {
    return PixelFormat.TRANSLUCENT;
  }

  @Override
  public void setAlpha(int alpha) {
    // empty
  }

  @Override
  public void setColorFilter(ColorFilter cf) {
    // empty
  }

  @Override
  public final ConstantState getConstantState() {
    mState.changingConfigurationValue = super.getChangingConfigurations();
    return mState;
  }
  
  public static class SpinnerConstantState extends ConstantState {

    public final DisplayMetrics mDisplayMetrics;
    public final int mColor;
    public final Type mType;
    
    int changingConfigurationValue;
    
    public SpinnerConstantState(DisplayMetrics metrics, int color, Type type) {
      mDisplayMetrics = metrics;
      mColor = color;
      mType = type;
    }

    @Override
    public int getChangingConfigurations() {
      return changingConfigurationValue;
    }

    @Override
    public Drawable newDrawable() {
      return new SpinnerDrawable(mDisplayMetrics, mColor, mType);
    }
    
  }

}




Java Source Code List

com.negusoft.holoaccent.AccentHelper.java
com.negusoft.holoaccent.AccentPalette.java
com.negusoft.holoaccent.AccentResources.java
com.negusoft.holoaccent.activity.AccentActivity.java
com.negusoft.holoaccent.dialog.AccentAlertDialog.java
com.negusoft.holoaccent.dialog.AccentDatePickerDialog.java
com.negusoft.holoaccent.dialog.AccentDialogFragment.java
com.negusoft.holoaccent.dialog.AccentTimePickerDialog.java
com.negusoft.holoaccent.dialog.DividerPainter.java
com.negusoft.holoaccent.dialog.NumberPickerPainter.java
com.negusoft.holoaccent.drawable.ActionBarBackgroundDrawable.java
com.negusoft.holoaccent.drawable.CircleDrawable.java
com.negusoft.holoaccent.drawable.ContactBadgeDrawable.java
com.negusoft.holoaccent.drawable.FastScrollDrawable.java
com.negusoft.holoaccent.drawable.IndeterminedProgressDrawable.java
com.negusoft.holoaccent.drawable.IndeterminedProgressLegacyDrawable.java
com.negusoft.holoaccent.drawable.RectDrawable.java
com.negusoft.holoaccent.drawable.RoundRectDrawable.java
com.negusoft.holoaccent.drawable.ScrubberControlSelectorDrawable.java
com.negusoft.holoaccent.drawable.ScrubberProgressDrawable.java
com.negusoft.holoaccent.drawable.SearchViewDrawable.java
com.negusoft.holoaccent.drawable.SpinnerDrawable.java
com.negusoft.holoaccent.drawable.ToggleForegroundDrawable.java
com.negusoft.holoaccent.drawable.UnderlineDrawable.java
com.negusoft.holoaccent.example.activity.AccentFragmentActivity.java
com.negusoft.holoaccent.example.activity.DialogActivity.java
com.negusoft.holoaccent.example.activity.MainActivity.java
com.negusoft.holoaccent.example.activity.PreferencesActivity.java
com.negusoft.holoaccent.example.activity.SpinnerActivity.java
com.negusoft.holoaccent.example.activity.TabbedActivity.java
com.negusoft.holoaccent.example.activity.TabbedStripActivity.java
com.negusoft.holoaccent.example.activity.themed.DialogActivityLight.java
com.negusoft.holoaccent.example.activity.themed.PreferencesActivityColoredABInverse.java
com.negusoft.holoaccent.example.activity.themed.PreferencesActivityColoredAB.java
com.negusoft.holoaccent.example.activity.themed.PreferencesActivityLightColoredABInverse.java
com.negusoft.holoaccent.example.activity.themed.PreferencesActivityLightColoredAB.java
com.negusoft.holoaccent.example.activity.themed.PreferencesActivityLightDarkAB.java
com.negusoft.holoaccent.example.activity.themed.PreferencesActivityLight.java
com.negusoft.holoaccent.example.activity.themed.SpinnerActivityColoredABInverse.java
com.negusoft.holoaccent.example.activity.themed.SpinnerActivityColoredAB.java
com.negusoft.holoaccent.example.activity.themed.SpinnerActivityLightColoredABInverse.java
com.negusoft.holoaccent.example.activity.themed.SpinnerActivityLightColoredAB.java
com.negusoft.holoaccent.example.activity.themed.SpinnerActivityLightDarkAB.java
com.negusoft.holoaccent.example.activity.themed.SpinnerActivityLight.java
com.negusoft.holoaccent.example.activity.themed.TabbedActivityColoredABInverse.java
com.negusoft.holoaccent.example.activity.themed.TabbedActivityColoredAB.java
com.negusoft.holoaccent.example.activity.themed.TabbedActivityLightColoredABInverse.java
com.negusoft.holoaccent.example.activity.themed.TabbedActivityLightColoredAB.java
com.negusoft.holoaccent.example.activity.themed.TabbedActivityLightDarkAB.java
com.negusoft.holoaccent.example.activity.themed.TabbedActivityLight.java
com.negusoft.holoaccent.example.activity.themed.TabbedStripActivityColoredABInverse.java
com.negusoft.holoaccent.example.activity.themed.TabbedStripActivityColoredAB.java
com.negusoft.holoaccent.example.activity.themed.TabbedStripActivityLightColoredABInverse.java
com.negusoft.holoaccent.example.activity.themed.TabbedStripActivityLightColoredAB.java
com.negusoft.holoaccent.example.activity.themed.TabbedStripActivityLightDarkAB.java
com.negusoft.holoaccent.example.activity.themed.TabbedStripActivityLight.java
com.negusoft.holoaccent.example.fragment.AccentSupportDialogFragment.java
com.negusoft.holoaccent.example.fragment.ButtonFragment.java
com.negusoft.holoaccent.example.fragment.ChoicesFragment.java
com.negusoft.holoaccent.example.fragment.ListFragment.java
com.negusoft.holoaccent.example.fragment.PickersFragment.java
com.negusoft.holoaccent.example.fragment.ProgressFragment.java
com.negusoft.holoaccent.example.fragment.SimpleDialogFragment.java
com.negusoft.holoaccent.example.fragment.TextviewFragment.java
com.negusoft.holoaccent.example.model.ColorOverrideConfig.java
com.negusoft.holoaccent.example.preference.CustomDialogPreference.java
com.negusoft.holoaccent.example.view.CheckableTextView.java
com.negusoft.holoaccent.interceptor.AccentColorInterceptor.java
com.negusoft.holoaccent.interceptor.ActionBarBackgroundInterceptor.java
com.negusoft.holoaccent.interceptor.CircleInterceptor.java
com.negusoft.holoaccent.interceptor.ContactBadgeInterceptor.java
com.negusoft.holoaccent.interceptor.FastScrollInterceptor.java
com.negusoft.holoaccent.interceptor.IndeterminateInterceptor.java
com.negusoft.holoaccent.interceptor.NativeInterceptor.java
com.negusoft.holoaccent.interceptor.PagerTabStripInterceptor.java
com.negusoft.holoaccent.interceptor.RectInterceptor.java
com.negusoft.holoaccent.interceptor.RoundRectInterceptor.java
com.negusoft.holoaccent.interceptor.ScrubberInterceptor.java
com.negusoft.holoaccent.interceptor.SearchViewTextFieldInterceptor.java
com.negusoft.holoaccent.interceptor.SolidColorInterceptor.java
com.negusoft.holoaccent.interceptor.SpinnerInterceptor.java
com.negusoft.holoaccent.interceptor.ToggleInterceptor.java
com.negusoft.holoaccent.interceptor.UnderlineInterceptor.java
com.negusoft.holoaccent.preference.DialogPreference.java
com.negusoft.holoaccent.preference.EditTextPreference.java
com.negusoft.holoaccent.preference.ListPreference.java
com.negusoft.holoaccent.preference.MultiSelectListPreference.java
com.negusoft.holoaccent.preference.SwitchPreference.java
com.negusoft.holoaccent.util.BitmapUtils.java
com.negusoft.holoaccent.util.NativeResources.java
com.negusoft.holoaccent.widget.AccentDatePicker.java
com.negusoft.holoaccent.widget.AccentNumberPicker.java
com.negusoft.holoaccent.widget.AccentQuickContactBadge.java
com.negusoft.holoaccent.widget.AccentRatingBar.java
com.negusoft.holoaccent.widget.AccentSearchView.java
com.negusoft.holoaccent.widget.AccentSwitch.java
com.negusoft.holoaccent.widget.AccentTimePicker.java