我正在尝试显示一些Firestore集合文档字段值作为数据点。在y轴中,我具有整数值,但在x轴中,我想显示日期。我想要的日期格式为dd / MM-HH:mm。我使用jjoe64 android图形库。我想在x轴上垂直显示每个数据点的日期,可以吗? 到目前为止,这是我所做的。有什么办法吗? x Axis dates
这是我的片段代码:
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;
}
}