use of lecho.lib.hellocharts.model.AxisValue in project CoCoin by Nightonke.
the class TodayViewRecyclerViewAdapter method onBindViewHolder.
@Override
public void onBindViewHolder(final viewHolder holder, final int position) {
switch(getItemViewType(position)) {
case TYPE_HEADER:
holder.date.setText(dateString);
holder.dateBottom.setText(dateString);
holder.expanseSum.setText(CoCoinUtil.GetInMoney((int) Sum));
holder.date.setTypeface(CoCoinUtil.GetTypeface());
holder.dateBottom.setTypeface(CoCoinUtil.GetTypeface());
holder.expanseSum.setTypeface(CoCoinUtil.typefaceLatoLight);
if (IS_EMPTY) {
holder.emptyTip.setVisibility(View.VISIBLE);
holder.emptyTip.setText(CoCoinUtil.GetTodayViewEmptyTip(fragmentPosition));
holder.emptyTip.setTypeface(CoCoinUtil.GetTypeface());
holder.reset.setVisibility(View.GONE);
holder.pie.setVisibility(View.GONE);
holder.iconLeft.setVisibility(View.GONE);
holder.iconRight.setVisibility(View.GONE);
holder.histogram.setVisibility(View.GONE);
holder.histogram_icon_left.setVisibility(View.GONE);
holder.histogram_icon_right.setVisibility(View.GONE);
holder.all.setVisibility(View.GONE);
holder.dateBottom.setVisibility(View.GONE);
} else {
holder.emptyTip.setVisibility(View.GONE);
final ArrayList<SliceValue> sliceValues = new ArrayList<>();
for (Map.Entry<Integer, Double> entry : TagExpanse.entrySet()) {
if (entry.getValue() >= 1) {
SliceValue sliceValue = new SliceValue((float) (double) entry.getValue(), mContext.getApplicationContext().getResources().getColor(CoCoinUtil.GetTagColorResource(entry.getKey())));
sliceValue.setLabel(String.valueOf(entry.getKey()));
sliceValues.add(sliceValue);
}
}
final PieChartData pieChartData = new PieChartData(sliceValues);
pieChartData.setHasLabels(false);
pieChartData.setHasLabelsOnlyForSelected(false);
pieChartData.setHasLabelsOutside(false);
pieChartData.setHasCenterCircle(SettingManager.getInstance().getIsHollow());
holder.pie.setPieChartData(pieChartData);
holder.pie.setChartRotationEnabled(false);
// two control button of pie////////////////////////////////////////////////////////////////////////
holder.iconRight.setVisibility(View.VISIBLE);
holder.iconRight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (lastPieSelectedPosition != -1) {
pieSelectedPosition = lastPieSelectedPosition;
}
pieSelectedPosition = (pieSelectedPosition - 1 + sliceValues.size()) % sliceValues.size();
SelectedValue selectedValue = new SelectedValue(pieSelectedPosition, 0, SelectedValue.SelectedValueType.NONE);
holder.pie.selectValue(selectedValue);
}
});
holder.iconLeft.setVisibility(View.VISIBLE);
holder.iconLeft.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (lastPieSelectedPosition != -1) {
pieSelectedPosition = lastPieSelectedPosition;
}
pieSelectedPosition = (pieSelectedPosition + 1) % sliceValues.size();
SelectedValue selectedValue = new SelectedValue(pieSelectedPosition, 0, SelectedValue.SelectedValueType.NONE);
holder.pie.selectValue(selectedValue);
}
});
final List<Column> columns = new ArrayList<>();
final ColumnChartData columnChartData = new ColumnChartData(columns);
if (!(fragmentPosition == TODAY || fragmentPosition == YESTERDAY)) {
for (int i = 0; i < columnNumber; i++) {
if (lastHistogramSelectedPosition == -1 && originalTargets[i] == 0) {
lastHistogramSelectedPosition = i;
}
SubcolumnValue value = new SubcolumnValue(originalTargets[i], CoCoinUtil.GetRandomColor());
List<SubcolumnValue> subcolumnValues = new ArrayList<>();
subcolumnValues.add(value);
Column column = new Column(subcolumnValues);
column.setHasLabels(false);
column.setHasLabelsOnlyForSelected(false);
columns.add(column);
}
Axis axisX = new Axis();
List<AxisValue> axisValueList = new ArrayList<>();
for (int i = 0; i < columnNumber; i++) {
axisValueList.add(new AxisValue(i).setLabel(CoCoinUtil.GetAxisDateName(axis_date, i)));
}
axisX.setValues(axisValueList);
Axis axisY = new Axis().setHasLines(true);
columnChartData.setAxisXBottom(axisX);
columnChartData.setAxisYLeft(axisY);
columnChartData.setStacked(true);
holder.histogram.setColumnChartData(columnChartData);
holder.histogram.setZoomEnabled(false);
// two control button of histogram//////////////////////////////////////////////////////////////////
holder.histogram_icon_left.setVisibility(View.VISIBLE);
holder.histogram_icon_left.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
do {
lastHistogramSelectedPosition = (lastHistogramSelectedPosition - 1 + columnNumber) % columnNumber;
} while (columnChartData.getColumns().get(lastHistogramSelectedPosition).getValues().get(0).getValue() == 0);
SelectedValue selectedValue = new SelectedValue(lastHistogramSelectedPosition, 0, SelectedValue.SelectedValueType.NONE);
holder.histogram.selectValue(selectedValue);
}
});
holder.histogram_icon_right.setVisibility(View.VISIBLE);
holder.histogram_icon_right.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
do {
lastHistogramSelectedPosition = (lastHistogramSelectedPosition + 1) % columnNumber;
} while (columnChartData.getColumns().get(lastHistogramSelectedPosition).getValues().get(0).getValue() == 0);
SelectedValue selectedValue = new SelectedValue(lastHistogramSelectedPosition, 0, SelectedValue.SelectedValueType.NONE);
holder.histogram.selectValue(selectedValue);
}
});
}
if (fragmentPosition == TODAY || fragmentPosition == YESTERDAY) {
holder.histogram_icon_left.setVisibility(View.INVISIBLE);
holder.histogram_icon_right.setVisibility(View.INVISIBLE);
holder.histogram.setVisibility(View.GONE);
holder.dateBottom.setVisibility(View.GONE);
holder.reset.setVisibility(View.GONE);
}
// set value touch listener of pie//////////////////////////////////////////////////////////////////
holder.pie.setOnValueTouchListener(new PieChartOnValueSelectListener() {
@Override
public void onValueSelected(int p, SliceValue sliceValue) {
// snack bar
RecordManager recordManager = RecordManager.getInstance(mContext.getApplicationContext());
String text;
tagId = Integer.valueOf(String.valueOf(sliceValue.getLabelAsChars()));
double percent = sliceValue.getValue() / Sum * 100;
if ("zh".equals(CoCoinUtil.GetLanguage())) {
text = CoCoinUtil.GetSpendString((int) sliceValue.getValue()) + CoCoinUtil.GetPercentString(percent) + "\n" + "于" + CoCoinUtil.GetTagName(tagId);
} else {
text = "Spend " + (int) sliceValue.getValue() + " (takes " + String.format("%.2f", percent) + "%)\n" + "in " + CoCoinUtil.GetTagName(tagId);
}
if ("zh".equals(CoCoinUtil.GetLanguage())) {
dialogTitle = dateShownString + CoCoinUtil.GetSpendString((int) sliceValue.getValue()) + "\n" + "于" + CoCoinUtil.GetTagName(tagId);
} else {
dialogTitle = "Spend " + (int) sliceValue.getValue() + dateShownString + "\n" + "in " + CoCoinUtil.GetTagName(tagId);
}
Snackbar snackbar = Snackbar.with(mContext).type(SnackbarType.MULTI_LINE).duration(Snackbar.SnackbarDuration.LENGTH_SHORT).position(Snackbar.SnackbarPosition.BOTTOM).margin(15, 15).backgroundDrawable(CoCoinUtil.GetSnackBarBackground(fragmentPosition - 2)).text(text).textTypeface(CoCoinUtil.GetTypeface()).textColor(Color.WHITE).actionLabelTypeface(CoCoinUtil.GetTypeface()).actionLabel(mContext.getResources().getString(R.string.check)).actionColor(Color.WHITE).actionListener(new mActionClickListenerForPie());
SnackbarManager.show(snackbar);
if (p == lastPieSelectedPosition) {
return;
} else {
lastPieSelectedPosition = p;
}
if (!(fragmentPosition == TODAY || fragmentPosition == YESTERDAY)) {
// histogram data///////////////////////////////////////////////////////////////////////////////////
float[] targets = new float[columnNumber];
for (int i = 0; i < columnNumber; i++) targets[i] = 0;
for (int i = Expanse.get(tagId).size() - 1; i >= 0; i--) {
CoCoinRecord coCoinRecord = Expanse.get(tagId).get(i);
if (axis_date == Calendar.DAY_OF_WEEK) {
if (CoCoinUtil.WEEK_START_WITH_SUNDAY) {
targets[coCoinRecord.getCalendar().get(axis_date) - 1] += coCoinRecord.getMoney();
} else {
targets[(coCoinRecord.getCalendar().get(axis_date) + 5) % 7] += coCoinRecord.getMoney();
}
} else if (axis_date == Calendar.DAY_OF_MONTH) {
targets[coCoinRecord.getCalendar().get(axis_date) - 1] += coCoinRecord.getMoney();
} else {
targets[coCoinRecord.getCalendar().get(axis_date)] += coCoinRecord.getMoney();
}
}
lastHistogramSelectedPosition = -1;
for (int i = 0; i < columnNumber; i++) {
if (lastHistogramSelectedPosition == -1 && targets[i] != 0) {
lastHistogramSelectedPosition = i;
}
columnChartData.getColumns().get(i).getValues().get(0).setTarget(targets[i]);
}
holder.histogram.startDataAnimation();
}
}
@Override
public void onValueDeselected() {
}
});
if (!(fragmentPosition == TODAY || fragmentPosition == YESTERDAY)) {
// set value touch listener of histogram////////////////////////////////////////////////////////////
holder.histogram.setOnValueTouchListener(new ColumnChartOnValueSelectListener() {
@Override
public void onValueSelected(int columnIndex, int subcolumnIndex, SubcolumnValue value) {
lastHistogramSelectedPosition = columnIndex;
timeIndex = columnIndex;
// snack bar
RecordManager recordManager = RecordManager.getInstance(mContext.getApplicationContext());
String text = CoCoinUtil.GetSpendString((int) value.getValue());
if (tagId != -1)
// belongs a tag
if ("zh".equals(CoCoinUtil.GetLanguage()))
text = getSnackBarDateString() + text + "\n" + "于" + CoCoinUtil.GetTagName(tagId);
else
text += getSnackBarDateString() + "\n" + "in " + CoCoinUtil.GetTagName(tagId);
else // don't belong to any tag
if ("zh".equals(CoCoinUtil.GetLanguage()))
text = getSnackBarDateString() + "\n" + text;
else
text += "\n" + getSnackBarDateString();
// setting the snack bar and dialog title of histogram//////////////////////////////////////////////
dialogTitle = text;
Snackbar snackbar = Snackbar.with(mContext).type(SnackbarType.MULTI_LINE).duration(Snackbar.SnackbarDuration.LENGTH_SHORT).position(Snackbar.SnackbarPosition.BOTTOM).margin(15, 15).backgroundDrawable(CoCoinUtil.GetSnackBarBackground(fragmentPosition - 2)).text(text).textTypeface(CoCoinUtil.GetTypeface()).textColor(Color.WHITE).actionLabelTypeface(CoCoinUtil.GetTypeface()).actionLabel(mContext.getResources().getString(R.string.check)).actionColor(Color.WHITE).actionListener(new mActionClickListenerForHistogram());
SnackbarManager.show(snackbar);
}
@Override
public void onValueDeselected() {
}
});
}
// set the listener of the reset button/////////////////////////////////////////////////////////////
if (!(fragmentPosition == TODAY || fragmentPosition == YESTERDAY)) {
holder.reset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tagId = -1;
lastHistogramSelectedPosition = -1;
for (int i = 0; i < columnNumber; i++) {
if (lastHistogramSelectedPosition == -1 && originalTargets[i] != 0) {
lastHistogramSelectedPosition = i;
}
columnChartData.getColumns().get(i).getValues().get(0).setTarget(originalTargets[i]);
}
holder.histogram.startDataAnimation();
}
});
}
// set the listener of the show all button//////////////////////////////////////////////////////////
holder.all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((FragmentActivity) mContext).getSupportFragmentManager().beginTransaction().add(new RecordCheckDialogFragment(mContext, allData, getAllDataDialogTitle()), "MyDialog").commit();
}
});
}
break;
case TYPE_BODY:
holder.tagImage.setImageResource(CoCoinUtil.GetTagIcon(allData.get(position - 1).getTag()));
holder.money.setText((int) allData.get(position - 1).getMoney() + "");
holder.money.setTypeface(CoCoinUtil.typefaceLatoLight);
holder.cell_date.setText(allData.get(position - 1).getCalendarString());
holder.cell_date.setTypeface(CoCoinUtil.typefaceLatoLight);
holder.remark.setText(allData.get(position - 1).getRemark());
holder.remark.setTypeface(CoCoinUtil.typefaceLatoLight);
holder.index.setText(position + "");
holder.index.setTypeface(CoCoinUtil.typefaceLatoLight);
holder.layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String subTitle;
double spend = allData.get(position - 1).getMoney();
int tagId = allData.get(position - 1).getTag();
if ("zh".equals(CoCoinUtil.GetLanguage())) {
subTitle = CoCoinUtil.GetSpendString((int) spend) + "于" + CoCoinUtil.GetTagName(tagId);
} else {
subTitle = "Spend " + (int) spend + "in " + CoCoinUtil.GetTagName(tagId);
}
dialog = new MaterialDialog.Builder(mContext).icon(CoCoinUtil.GetTagIconDrawable(allData.get(position - 1).getTag())).limitIconToDefaultSize().title(subTitle).customView(R.layout.dialog_a_record, true).positiveText(R.string.get).show();
dialogView = dialog.getCustomView();
TextView remark = (TextView) dialogView.findViewById(R.id.remark);
TextView date = (TextView) dialogView.findViewById(R.id.date);
remark.setText(allData.get(position - 1).getRemark());
date.setText(allData.get(position - 1).getCalendarString());
}
});
break;
}
}
use of lecho.lib.hellocharts.model.AxisValue in project openScale by oliexdev.
the class GraphFragment method generateColumnData.
private void generateColumnData() {
int[] numOfMonth = openScale.getCountsOfMonth(calYears.get(Calendar.YEAR));
Calendar calMonths = Calendar.getInstance();
calMonths.set(Calendar.MONTH, Calendar.JANUARY);
SimpleDateFormat month_date = new SimpleDateFormat("MMM", Locale.getDefault());
List<AxisValue> axisValues = new ArrayList<AxisValue>();
List<Column> columns = new ArrayList<Column>();
for (int i = 0; i < 12; i++) {
String month_name = month_date.format(calMonths.getTime());
axisValues.add(new AxisValue(i, month_name.toCharArray()));
List<SubcolumnValue> values = new ArrayList<SubcolumnValue>();
values.add(new SubcolumnValue(numOfMonth[i], ChartUtils.COLORS[i % ChartUtils.COLORS.length]));
columns.add(new Column(values).setHasLabelsOnlyForSelected(true));
calMonths.add(Calendar.MONTH, 1);
}
ColumnChartData columnData = new ColumnChartData(columns);
columnData.setAxisXBottom(new Axis(axisValues).setHasLines(true).setTextColor(textColor));
chartTop.setColumnChartData(columnData);
chartTop.setValueSelectionEnabled(true);
chartTop.setZoomEnabled(false);
chartTop.selectValue(new SelectedValue(calLastSelected.get(Calendar.MONTH), 0, SelectedValue.SelectedValueType.COLUMN));
}
use of lecho.lib.hellocharts.model.AxisValue in project openScale by oliexdev.
the class OverviewFragment method updateLastLineChart.
private void updateLastLineChart(List<ScaleMeasurement> scaleMeasurementList) {
final Calendar now = Calendar.getInstance();
Calendar histCalendar = Calendar.getInstance();
scaleMeasurementLastDays = new ArrayList<>();
List<AxisValue> axisValues = new ArrayList<>();
int max_i = Math.min(7, scaleMeasurementList.size());
for (int i = 0; i < max_i; ++i) {
ScaleMeasurement measurement = scaleMeasurementList.get(max_i - i - 1);
scaleMeasurementLastDays.add(measurement);
histCalendar.setTime(measurement.getDateTime());
int days = DateTimeHelpers.daysBetween(now, histCalendar);
String label = getResources().getQuantityString(R.plurals.label_days, Math.abs(days), days);
axisValues.add(new AxisValue(i, label.toCharArray()));
}
List<Line> diagramLineList = new ArrayList<>();
for (MeasurementView view : measurementViews) {
if (!view.isVisible() || !view.getSettings().isInOverviewGraph() || !(view instanceof FloatMeasurementView)) {
continue;
}
FloatMeasurementView measurementView = (FloatMeasurementView) view;
Stack<PointValue> valuesStack = new Stack<PointValue>();
for (int i = 0; i < max_i; ++i) {
ScaleMeasurement measurement = scaleMeasurementList.get(max_i - i - 1);
measurementView.loadFrom(measurement, null);
if (measurementView.getValue() != 0.0f) {
valuesStack.push(new PointValue(i, measurementView.getValue()));
}
}
diagramLineList.add(new Line(valuesStack).setColor(measurementView.getColor()).setHasLabels(prefs.getBoolean("labelsEnable", true)).setHasPoints(prefs.getBoolean("pointsEnable", true)).setFormatter(new SimpleLineChartValueFormatter(1)));
}
LineChartData lineData = new LineChartData(diagramLineList);
lineData.setAxisXBottom(new Axis(axisValues).setHasLines(true).setTextColor(txtTitleLastMeasurement.getCurrentTextColor()));
lineData.setAxisYLeft(new Axis().setHasLines(true).setMaxLabelChars(5).setTextColor(txtTitleLastMeasurement.getCurrentTextColor()));
lineChartLast.setLineChartData(lineData);
lineChartLast.setViewportCalculationEnabled(true);
lineChartLast.setZoomEnabled(false);
}
use of lecho.lib.hellocharts.model.AxisValue in project hellocharts-android by lecho.
the class AxesRenderer method prepareCustomAxis.
private void prepareCustomAxis(Axis axis, int position) {
final Viewport maxViewport = computator.getMaximumViewport();
final Viewport visibleViewport = computator.getVisibleViewport();
final Rect contentRect = computator.getContentRectMinusAllMargins();
boolean isAxisVertical = isAxisVertical(position);
float viewportMin, viewportMax;
float scale = 1;
if (isAxisVertical) {
if (maxViewport.height() > 0 && visibleViewport.height() > 0) {
scale = contentRect.height() * (maxViewport.height() / visibleViewport.height());
}
viewportMin = visibleViewport.bottom;
viewportMax = visibleViewport.top;
} else {
if (maxViewport.width() > 0 && visibleViewport.width() > 0) {
scale = contentRect.width() * (maxViewport.width() / visibleViewport.width());
}
viewportMin = visibleViewport.left;
viewportMax = visibleViewport.right;
}
if (scale == 0) {
scale = 1;
}
int module = (int) Math.max(1, Math.ceil((axis.getValues().size() * labelDimensionForStepsTab[position] * 1.5) / scale));
// Reinitialize tab to hold lines coordinates.
if (axis.hasLines() && (linesDrawBufferTab[position].length < axis.getValues().size() * 4)) {
linesDrawBufferTab[position] = new float[axis.getValues().size() * 4];
}
// Reinitialize tabs to hold all raw values to draw.
if (rawValuesTab[position].length < axis.getValues().size()) {
rawValuesTab[position] = new float[axis.getValues().size()];
}
// Reinitialize tabs to hold all raw values to draw.
if (valuesToDrawTab[position].length < axis.getValues().size()) {
valuesToDrawTab[position] = new AxisValue[axis.getValues().size()];
}
float rawValue;
int valueIndex = 0;
int valueToDrawIndex = 0;
for (AxisValue axisValue : axis.getValues()) {
// Draw axis values that are within visible viewport.
final float value = axisValue.getValue();
if (value >= viewportMin && value <= viewportMax) {
// Draw axis values that have 0 module value, this will hide some labels if there is no place for them.
if (0 == valueIndex % module) {
if (isAxisVertical) {
rawValue = computator.computeRawY(value);
} else {
rawValue = computator.computeRawX(value);
}
if (checkRawValue(contentRect, rawValue, axis.isInside(), position, isAxisVertical)) {
rawValuesTab[position][valueToDrawIndex] = rawValue;
valuesToDrawTab[position][valueToDrawIndex] = axisValue;
++valueToDrawIndex;
}
}
// If within viewport - increment valueIndex;
++valueIndex;
}
}
valuesToDrawNumTab[position] = valueToDrawIndex;
}
use of lecho.lib.hellocharts.model.AxisValue in project hellocharts-android by lecho.
the class AxesRenderer method drawAxisLabelsAndName.
private void drawAxisLabelsAndName(Canvas canvas, Axis axis, int position) {
float labelX, labelY;
labelX = labelY = 0;
boolean isAxisVertical = isAxisVertical(position);
if (LEFT == position || RIGHT == position) {
labelX = labelBaselineTab[position];
} else if (TOP == position || BOTTOM == position) {
labelY = labelBaselineTab[position];
}
for (int valueToDrawIndex = 0; valueToDrawIndex < valuesToDrawNumTab[position]; ++valueToDrawIndex) {
int charsNumber = 0;
if (axis.isAutoGenerated()) {
final float value = autoValuesToDrawTab[position][valueToDrawIndex];
charsNumber = axis.getFormatter().formatValueForAutoGeneratedAxis(labelBuffer, value, autoValuesBufferTab[position].decimals);
} else {
AxisValue axisValue = valuesToDrawTab[position][valueToDrawIndex];
charsNumber = axis.getFormatter().formatValueForManualAxis(labelBuffer, axisValue);
}
if (isAxisVertical) {
labelY = rawValuesTab[position][valueToDrawIndex];
} else {
labelX = rawValuesTab[position][valueToDrawIndex];
}
if (axis.hasTiltedLabels()) {
canvas.save();
canvas.translate(tiltedLabelXTranslation[position], tiltedLabelYTranslation[position]);
canvas.rotate(-45, labelX, labelY);
canvas.drawText(labelBuffer, labelBuffer.length - charsNumber, charsNumber, labelX, labelY, labelPaintTab[position]);
canvas.restore();
} else {
canvas.drawText(labelBuffer, labelBuffer.length - charsNumber, charsNumber, labelX, labelY, labelPaintTab[position]);
}
}
// Drawing axis name
final Rect contentRectMargins = computator.getContentRectMinusAxesMargins();
if (!TextUtils.isEmpty(axis.getName())) {
if (isAxisVertical) {
canvas.save();
canvas.rotate(-90, contentRectMargins.centerY(), contentRectMargins.centerY());
canvas.drawText(axis.getName(), contentRectMargins.centerY(), nameBaselineTab[position], namePaintTab[position]);
canvas.restore();
} else {
canvas.drawText(axis.getName(), contentRectMargins.centerX(), nameBaselineTab[position], namePaintTab[position]);
}
}
}
Aggregations