我已經使用achartengine,可以平移,縮放等。Android acharengine - 只要數據點不在可見區域,圖形就會消失?
最初圖表在平底鍋上消失。
我得到的OpenGl呈現警告 - 路徑太大,無法渲染成紋理。
我把硬件加速轉爲假,解決了問題。
現在,當我放大圖形,並且數據點超出可見區域時,圖形類型消失,並將軸設置爲0000-0-0000。
請參考附件截圖。
時的點是在可見光區域: -
正如我放大點超出可見光區: -
這是的問題圖書館。 如果是的話,任何人有任何解決方案?
編輯:----
下面是一些代碼:
mRenderer.setApplyBackgroundColor(true);
mRenderer.setBackgroundColor(Color.WHITE);
mRenderer.setMarginsColor(Color.WHITE);
mRenderer.setAxisTitleTextSize(16);
mRenderer.setChartTitleTextSize(20);
mRenderer.setLabelsTextSize(15);
mRenderer.setLegendTextSize(15);
mRenderer.setZoomButtonsVisible(false);
mRenderer.setPointSize(8);
if (mChartView == null) {
layout = (RelativeLayout) findViewById(R.id.chart);
leftDate = (TextView) findViewById(R.id.left_date);
rightDate = (TextView) findViewById(R.id.right_date);
layout.setEnabled(true);
mChartView = ChartFactory.getLineChartView(this, mDataset,
mRenderer);
// enable the chart click events
mRenderer.setClickEnabled(true);
mRenderer.setSelectableBuffer(10);
String seriesTitle = "Series " + (mDataset.getSeriesCount() + 1);
// create a new series of data
XYSeries series = new XYSeries(seriesTitle);
mDataset.addSeries(series);
mCurrentSeries = series;
// create a new renderer for the new series
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setColor(Color.BLACK);
renderer.setPointStyle(PointStyle.CIRCLE);
renderer.setPointStrokeWidth(5);
renderer.setShowLegendItem(false);
renderer.setFillPoints(true);
renderer.setFillBelowLine(true);
renderer.setFillBelowLineColor(getResources().getColor(
R.color.graph_green));
renderer.setFillPoints(true);
renderer.setDisplayChartValuesDistance(20);
mRenderer.addSeriesRenderer(renderer);
// set some renderer properties
mCurrentRenderer = renderer;
mRenderer.setAxisTitleTextSize(16);
// mRenderer.setChartTitleTextSize(20);
// mRenderer.setLabelsTextSize(15);
// mRenderer.setLegendTextSize(15);
mRenderer.setPanEnabled(true, false);
mRenderer.setYAxisAlign(Align.LEFT, 0);
mRenderer.setYLabelsAlign(Align.RIGHT, 0);
mRenderer.setXLabelsColor(Color.WHITE);
mRenderer.setApplyBackgroundColor(true);
mRenderer.setBackgroundColor(Color.WHITE);
mRenderer.setMarginsColor(Color.WHITE);
mRenderer.setPointSize(8f);
mRenderer.setAxesColor(Color.GRAY);
mRenderer.setLabelsColor(Color.BLACK);
try {
FetchWeight fetchWeight = FetchWeightCacheManager
.getObject(Controller.getAppBackgroundContext());
if (fetchWeight.getData().size() != 0) {
for (int i = 0; i < fetchWeight.getData().size(); i++) {
kilo = (long) fetchWeight.getData().get(i).getKilos();
weight_date = (long) fetchWeight.getData().get(i)
.getTimestamp();
if (count == 0) {
default_start_date = weight_date - 100000;
System.out.println("default start date = "
+ default_start_date);
mCurrentSeries.add(default_start_date, kilo);
weights.add(kilo);
dates.add(default_start_date);
count++;
}
System.out.println("time:" + weight_date);
System.out.println("kilo:" + kilo);
mCurrentSeries.add(weight_date, kilo);
weights.add(kilo);
dates.add(weight_date);
}
}
} catch (Exception e) {
System.out.println("No weights to fetch :" + e);
}
double minx = mRenderer.getXAxisMin();
double maxx = mRenderer.getXAxisMax();
System.out.println("min x = " + minx);
System.out.println("max x = " + maxx);
mRenderer.setRange(new double[] { default_start_date,
weight_date + 1000000, kilo - 20, kilo + 20 });
mY.setText("");
// repaint the chart such as the newly added point to be visible
mChartView.repaint();
這裏是泛聽衆:
mChartView.addPanListener(new PanListener() {
private double timestampdouble;
private Integer image_index;
private int mid_value;
private Double max_double;
private Double min_double;
public void panApplied() {
// customListAdapter.setGraphTouched(true);
ArrayList<Long> insideweights = new ArrayList<Long>();
double minx = mRenderer.getXAxisMin();
double maxx = mRenderer.getXAxisMax();
long minx_default = (long) minx;
long maxx_default = (long) maxx;
// change UI onscrollview minx & maxx
leftDate.setText("" + getDateFormat(minx_default));
rightDate.setText("" + getDateFormat(maxx_default));
new AsyncScroll(minx_default, maxx_default).execute();
double getmax_weight = get_max_weight();
double getmin_weight = get_min_weight();
if (minx_default <= default_start_date) {
mRenderer.setRange(new double[] { default_start_date,
maxx, getmin_weight - 20, getmax_weight + 20 });
} else {
mRenderer.setRange(new double[] { minx, maxx,
getmin_weight - 20, getmax_weight + 20 });
}
}
get_max_weights/get_min_weight得到的Y分和最高分軸,我正在使用它們來渲染圖形。
這是一個令人困惑的代碼,但我不能在這裏發佈整個代碼。
你能添加什麼都沒有做? – keshav
已編輯!這是一個很大的代碼,所以不能在這裏發佈一切。 – ashishashen