未绘制绘图并且 ACTION_MOVE 未在 OnTouchListener 中检测到

Plots are not drawn and ACTION_MOVE not detected in OnTouchListener

我正在尝试为我的应用程序创建不同的图表,并且我使用的是 AndroidPlot。我想在不同的绘图之间滑动,这样当我向左滑动时,会绘制一个新图表。

我已经实现了 OnTouchListener 和一个绘制图表的函数 drawChart(String Discipline),但是,当从 OnTouch 调用 drawChart 时,它不起作用。

此外,如果我尝试检测 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;
    }
}

如果我从 onActivityCreated 调用 drawChart("Skeet"),它工作正常。但是当从 OnTouchListener 调用时,我只会收到很多消息,例如:

Looking up object containing: textPaint.color

Attempting to find getter for textPaint in class com.androidplot.xy.PointLabelFormatter

Invoking getTextPaint on instance of com.androidplot.xy.PointLabelFormatter

好像无法从xml-文件中读取参数?任何想法表示赞赏!

/埃里克

将以下内容添加到 drawChart() 的末尾应该可以正常工作:

plot.redraw();

您需要调用 Plot.redraw() 更改系列数据、添加或删除绘图中的系列或更改线条颜色、粗细等显示参数等 onActivityCreated() 之外。它在从 onActivityCreated() 调用时起作用的原因是因为该代码在 Androidplot 完成初始化之前运行。初始化完成后,redraw() 会自动调用一次以确保绘图始终可见。