2015-12-31 4 views
0

Я пытаюсь создать различные диаграммы для своего приложения, и я использую AndroidPlot. Я хочу провести между различными графиками, так что, когда я прокручиваю левый элемент, нарисован, например, новый график.Звонки не нарисованы и ACTION_MOVE не обнаружены в OnTouchListener

Я внедрил OnTouchListener и функцию drawChart(String Discipline), которая должна нарисовать график, однако, когда drawChart вызывается из OnTouch, он не работает.

Кроме того, если я пытаюсь обнаружить ACTION_MOVE, ничего не происходит, обнаруживается только ACTION_DOWN. Я не понимаю, почему.

Вот код:

import android.content.Intent; 
import android.graphics.Color; 
import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.ViewGroup; 


import com.androidplot.Plot; 
import com.androidplot.xy.BoundaryMode; 
import com.androidplot.xy.LineAndPointFormatter; 
import com.androidplot.xy.PointLabelFormatter; 
import com.androidplot.xy.SimpleXYSeries; 
import com.androidplot.xy.XYPlot; 
import com.androidplot.xy.XYSeries; 
import com.androidplot.xy.XYStepMode; 

import java.lang.reflect.Array; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

/** 
* A placeholder fragment containing a simple view. 
*/ 
public class DrawChartsFragment extends Fragment implements View.OnTouchListener{ 
    XYPlot plot; 

    public DrawChartsFragment() { 
    } 

    Number[] getXcoord(int length){ 
     Number[] tmp = new Number[length]; 
     for (int i = 0; i < length; i++){ 
      tmp[i] = i; 
     } 
     return tmp; 
    } 

    private void drawChart(String Discipline){ 
     plot = (XYPlot)getActivity().findViewById(R.id.plot); 

     Number[] data = Statistic.getDataPoint(Discipline); 
     List<Number> list = Arrays.asList(data); 
     Number[] x = getXcoord(list.size()); 
     XYSeries series = new SimpleXYSeries(Arrays.asList(x),list,Discipline); 
     LineAndPointFormatter series1Format = new LineAndPointFormatter(); 
     series1Format.setPointLabelFormatter(new PointLabelFormatter()); 
     series1Format.configure(getActivity().getApplicationContext(), 
       R.xml.line_point_formatter_with_labels); 
     plot.setDomainStep(XYStepMode.INCREMENT_BY_VAL, 5); 
     plot.setRangeBoundaries(0, 100, BoundaryMode.FIXED); 
     plot.setRangeStep(XYStepMode.INCREMENT_BY_VAL, 10); 
     plot.addSeries(series, series1Format); 
     plot.setTitle(Discipline); 
    } 
    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     plot = (XYPlot)getActivity().findViewById(R.id.plot); 
     // plot.setOnTouchListener(this); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_draw_charts, container, false); 
     rootView.setOnTouchListener(this); 
     return rootView; 
    } 


    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     drawChart("Skeet"); 
     switch (event.getAction()){ 
     case MotionEvent.ACTION_MOVE: 
      MainActivity.showToast("Move"); 
      return true; 
    } 
    return false; 
     return false; 
    } 
} 

Если я позвоню drawChart("Skeet") из onActivityCreated, он отлично работает. Но при вызове из OnTouchListener, то я только получаю много сообщений, как:

Глядя на объект, содержащий: textPaint.color

Попытка найти поглотитель для textPaint в классе com.androidplot.xy.PointLabelFormatter

Вызов getTextPaint на экземпляре com.androidplot.xy.PointLabelFormatter

Похоже, что это не может прочитать параметры из XML-файла? Любые идеи приветствуются!

/Erik

ответ

0

Добавление следующих до конца DrawChart() должны получить все заработало:

plot.redraw(); 

Вам нужно позвонить Plot.redraw() при внесении изменений в серии данные, добавлять или удалять серию в сюжете или изменять параметры отображения, такие как цвет линий, толщина и т. д. за пределами onActivityCreated(). Причина, по которой она работает при вызове от onActivityCreated(), заключается в том, что этот код работает до того, как Androidplot завершит инициализацию. После завершения инициализации redraw() автоматически вызывается один раз, чтобы гарантировать, что график всегда отображается.

 Смежные вопросы

  • Нет связанных вопросов^_^