package org.solovyev.android.views.dragbutton; import android.content.Context; import android.graphics.Canvas; import android.support.annotation.ColorInt; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.TextPaint; import android.util.AttributeSet; import static android.graphics.Color.BLACK; import static android.util.TypedValue.COMPLEX_UNIT_DIP; import static android.util.TypedValue.applyDimension; import static org.solovyev.android.views.dragbutton.DirectionTextView.SHADOW_RADIUS_DPS; public class DirectionDragButton extends DragButton implements DirectionDragView { private final DirectionTextView textView = new DirectionTextView(); @NonNull private final TextPaint baseTextPaint = new TextPaint(); private boolean highContrast; public DirectionDragButton(Context context) { super(context); init(null); } public DirectionDragButton(Context context, AttributeSet attrs) { super(context, attrs); init(attrs); } public DirectionDragButton(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(attrs); } public DirectionDragButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(attrs); } private void init(@Nullable AttributeSet attrs) { textView.init(this, attrs); baseTextPaint.set(getPaint()); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); final TextPaint paint = getPaint(); if (baseTextPaint.getTextSize() != paint.getTextSize() || baseTextPaint.getTypeface() != paint.getTypeface() || baseTextPaint.getColor() != paint.getColor() || baseTextPaint.getAlpha() != paint.getAlpha()) { baseTextPaint.set(paint); textView.setBaseTextPaint(paint); } textView.draw(canvas); } @NonNull public String getTextValue(@NonNull DragDirection direction) { return getText(direction).getValue(); } @NonNull public DirectionDragButton setText(@NonNull DragDirection direction, @NonNull String value) { getText(direction).setValue(value); return this; } @Override @NonNull public DirectionTextView.Text getText(@NonNull DragDirection direction) { return textView.getText(direction); } public void setShowDirectionText(@NonNull DragDirection direction, boolean show) { getText(direction).setVisible(show); } public void setDirectionTextColor(@ColorInt int color) { for (DragDirection direction : DragDirection.values()) { getText(direction).setColor(color); } } public void setDirectionTextAlpha(float alpha) { for (DragDirection direction : DragDirection.values()) { getText(direction).setAlpha(alpha); } } @Override public void setHighContrast(boolean highContrast) { if(this.highContrast == highContrast) { return; } this.highContrast = highContrast; this.textView.setHighContrast(highContrast); if (highContrast && DirectionTextView.needsShadow(getCurrentTextColor())) { setShadowLayer(applyDimension(COMPLEX_UNIT_DIP, SHADOW_RADIUS_DPS, getResources().getDisplayMetrics()), 0, 0, BLACK); } else { setShadowLayer(0, 0, 0, BLACK); } } }