首页 > 解决方案 > 图表 x 轴日期未正确显示

问题描述

我正在尝试将一些 Firestore 集合文档字段值显示为数据点。在 y 轴上我有整数值,但在 x 轴上我想显示日期。我想要日期格式为 dd/MM-HH:mm。我使用 jjoe64 android 图形库。我想在 x 轴上垂直显示每个数据点的日期。这可能吗?这是我到目前为止所做的。有什么解决办法吗?x 轴日期

这是我的片段代码:

package com.example.drodo.diamondbeacons;


import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;
import com.google.firebase.firestore.QuerySnapshot;
import com.jjoe64.graphview.DefaultLabelFormatter;
import com.jjoe64.graphview.GraphView;
import com.jjoe64.graphview.LegendRenderer;
import com.jjoe64.graphview.Viewport;
import com.jjoe64.graphview.helper.StaticLabelsFormatter;
import com.jjoe64.graphview.series.DataPoint;
import com.jjoe64.graphview.series.LineGraphSeries;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


/**
 * A simple {@link Fragment} subclass.
 */
public class TimelineFragment extends Fragment {

    private FirebaseFirestore firebaseFirestore;
    private FirebaseAuth firebaseAuth;
    private EditText regionText;
    private Button regionChooseBtn;
    public SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yy-HH:mm");

    public TimelineFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_timeline, container, false);

        regionText = (EditText) view.findViewById(R.id.selectRegionText);
        regionChooseBtn = (Button) view.findViewById(R.id.chooseRegionBtn);
        GraphView graph = view.findViewById(R.id.graph);
        GraphView graph2 = view.findViewById(R.id.graph2);

        firebaseAuth = FirebaseAuth.getInstance();
        firebaseFirestore = FirebaseFirestore.getInstance();
        graph.getGridLabelRenderer().setLabelFormatter(new DefaultLabelFormatter() {

            @Override
            public String formatLabel(double value, boolean isValueX) {

                if (isValueX) {
                    return simpleDateFormat.format(new Date((long) value));
                }else {
                    return super.formatLabel(value, isValueX);
                }

            }
        });
        regionChooseBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String select_text = regionText.getText().toString();
                if (!select_text.isEmpty()) {

                    if(firebaseAuth.getCurrentUser() != null) {

                        firebaseFirestore.collection("PuckData").whereEqualTo("region", select_text)
                                .orderBy("timestamp", Query.Direction.ASCENDING)
                                .get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                            @Override
                            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                                if (task.isSuccessful()) {

                                    List<Long> dates_list = new ArrayList<>();
                                    List<Integer> temperature_list = new ArrayList<>();
                                    List<Integer> light_list = new ArrayList<>();
                                    for (DocumentSnapshot document : task.getResult()) {
                                        int light = document.getLong("light").intValue();
                                        int temperature = document.getLong("temperature").intValue();
                                        long x = document.getLong("timestamp");


                                        //String stringDate = simpleDateFormat.format(x);

                                        temperature_list.add(temperature);
                                        light_list.add(light);
                                        dates_list.add(x);
                                    }


                                    LineGraphSeries<DataPoint> series = new LineGraphSeries<>(generateTemperatureList(dates_list, temperature_list));
                                    series.setDrawBackground(true);
                                    series.setAnimated(true);
                                    series.setDrawDataPoints(true);
                                    graph.addSeries(series);
                                    graph.getViewport().setScalable(true); // enables horizontal zooming and scrolling

                                    Viewport viewport = graph.getViewport();

                                    viewport.setYAxisBoundsManual(true);
                                    viewport.setMinY(0);
                                    viewport.setMaxY(40);
                                    viewport.setScrollable(true);

                                    LineGraphSeries<DataPoint> series2 = new LineGraphSeries<>(generateLightList(dates_list, light_list));
                                    series2.setDrawBackground(true);
                                    series2.setColor(Color.argb(255, 135, 191, 163));
                                    series2.setBackgroundColor(Color.argb(100, 135, 191, 163));
                                    series2.setAnimated(true);
                                    series2.setDrawDataPoints(true);
                                    graph2.addSeries(series2);
                                    graph2.getViewport().setScalable(true); // enables horizontal zooming and scrolling

                                    Viewport viewport2 = graph2.getViewport();

                                    viewport2.setYAxisBoundsManual(true);
                                    viewport2.setMinY(0);
                                    viewport2.setMaxY(100);
                                    viewport2.setScrollable(true);


                                    Log.d("LIST", "DATES: " + dates_list.toString());
                                    Log.d("LIST", "TEMPS: " + temperature_list.toString());
                                    Log.d("LIST", "LIGHTS: " + light_list.toString());
                                } else {
                                    Log.d("PUCK", "Error getting documents: ", task.getException());
                                }
                            }
                        });

                    }
                }

                regionText.setText("");

                final InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
            }
        });
        return view;
    }

    private DataPoint[] generateLightList(List<Long> dateList, List<Integer> lightList) {
        DataPoint[] values = new DataPoint[dateList.size()];
        for (int i = 0; i < dateList.size(); i++) {
            DataPoint v = new DataPoint(Double.parseDouble(String.valueOf(dateList.get(i))), lightList.get(i));
            values[i] = v;
        }
        return values;
    }

    private DataPoint[] generateTemperatureList(List<Long> dateList, List<Integer> temperatureList) {
        DataPoint[] values = new DataPoint[dateList.size()];
        for (int i = 0; i < dateList.size(); i++) {
            DataPoint v = new DataPoint(Double.parseDouble(String.valueOf(dateList.get(i))), temperatureList.get(i));
            values[i] = v;
        }
        return values;
    }

}

标签: androidgraphlinegoogle-cloud-firestore

解决方案


推荐阅读