未绘制绘图并且 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() 会自动调用一次以确保绘图始终可见。
我正在尝试为我的应用程序创建不同的图表,并且我使用的是 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() 会自动调用一次以确保绘图始终可见。