package com.boardgamegeek.ui.widget; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.graphics.Palette; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.TextView; import com.boardgamegeek.R; import java.text.NumberFormat; import butterknife.BindView; import butterknife.ButterKnife; public class StatBar extends FrameLayout { private static final NumberFormat FORMAT = NumberFormat.getInstance(); @BindView(R.id.value) View valueView; @BindView(R.id.no_value) View noValueView; @BindView(android.R.id.text1) TextView textView; public StatBar(Context context) { this(context, null); } public StatBar(Context context, AttributeSet attrs) { this(context, attrs, 0); } public StatBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } private void init(Context context) { setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); setMinimumHeight(getResources().getDimensionPixelSize(R.dimen.stat_bar_height)); LayoutInflater li = LayoutInflater.from(context); li.inflate(R.layout.widget_stat_bar, this, true); ButterKnife.bind(this); } public void setBar(int id, double progress, double max) { textView.setText(String.format(getContext().getResources().getString(id), FORMAT.format(progress))); valueView.setLayoutParams(new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, (int) (progress * 1000))); noValueView.setLayoutParams(new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, (int) ((max - progress) * 1000))); } public void setColor(int color) { valueView.setBackgroundColor(color); } public static final ButterKnife.Setter<StatBar, Palette.Swatch> colorSetter = new ButterKnife.Setter<StatBar, Palette.Swatch>() { @Override public void set(@NonNull StatBar view, Palette.Swatch value, int index) { if (value != null) { view.setColor(value.getRgb()); } } }; }