Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更改Achartengine中选定条的颜色_Android_Bar Chart_Achartengine - Fatal编程技术网

Android 更改Achartengine中选定条的颜色

Android 更改Achartengine中选定条的颜色,android,bar-chart,achartengine,Android,Bar Chart,Achartengine,我必须更改用户在条形图中选择的特定条形图的颜色。 当用户选择该条时,我想更改该条的颜色,如果用户更改该条的选择,最后选择的条将显示为默认颜色 注意:我在一篇帖子中看到,我必须再使用一个包含所选条的系列,以便您可以实现这一点。但我需要一些示例代码来理解这一点 private String[] mMonth = new String[] { "January", "Feburary", "March", "April", "May", "June", "July", "Aug", "Sep", "O

我必须更改用户在条形图中选择的特定条形图的颜色。 当用户选择该条时,我想更改该条的颜色,如果用户更改该条的选择,最后选择的条将显示为默认颜色

注意:我在一篇帖子中看到,我必须再使用一个包含所选条的系列,以便您可以实现这一点。但我需要一些示例代码来理解这一点

private String[] mMonth = new String[] { "January", "Feburary", "March", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec" };
int[] x = { 0, 1, 2, 3, 4, 5, 6, 7 };
int[] income = { 2000, 2500, 2700, 3000, 2800, 3500, 3700, 3800 };
public static final String TYPE = "type";
private XYMultipleSeriesDataset mDataset = getDemoDataset();
private XYMultipleSeriesRenderer mRenderer = getDemoRenderer();
private GraphicalView mChartView;



protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.xy_chart);
    if (mChartView == null) {
        LinearLayout layout = (LinearLayout) findViewById(R.id.chart);
        mChartView = ChartFactory.getBarChartView(this, mDataset, mRenderer, Type.DEFAULT);
        mRenderer.setSelectableBuffer(100);
        layout.addView(mChartView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    } else {
        mChartView.repaint();
    }

    mChartView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            // handle the click event on the chart
              SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
              if (seriesSelection == null) {
                Toast.makeText(NewTest.this, "No chart element", Toast.LENGTH_SHORT).show();
              } else {  


                  for (int i = 0; i < x.length; i++) {
                      SimpleSeriesRenderer renderer = mRenderer.getSeriesRendererAt(seriesSelection.getSeriesIndex());
                      renderer.setColor(Color.RED);  
                    }


                    mChartView.repaint();

                // display information of the clicked point
                Toast.makeText(
                        NewTest.this,
                    "Chart element in series index " + seriesSelection.getSeriesIndex()
                        + " data point index " + seriesSelection.getPointIndex() + " was clicked"
                        + " closest point value X=" + seriesSelection.getXValue() + ", Y="
                        + seriesSelection.getValue(), Toast.LENGTH_SHORT).show();
              }
        }
    });

}

 private XYMultipleSeriesDataset getDemoDataset() {

        XYSeries incomeSeries = new XYSeries("Income");
        for (int i = 0; i < x.length; i++) {
            incomeSeries.add(i, income[i]);
        }

        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
        dataset.addSeries(incomeSeries);
        return dataset;

    }

 private XYMultipleSeriesRenderer getDemoRenderer() {
        XYSeriesRenderer incomeRenderer =  new XYSeriesRenderer();
        incomeRenderer.setColor(Color.rgb(130, 130, 230));
        incomeRenderer.setFillPoints(true);
        incomeRenderer.setLineWidth(2);
        incomeRenderer.setChartValuesTextAlign(Align.CENTER);
        incomeRenderer.setChartValuesSpacing(15);
        incomeRenderer.setDisplayChartValues(true);

        XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
        multiRenderer.setXLabels(0);
        multiRenderer.setYLabelsPadding(15);
        multiRenderer.setBarSpacing(0.3f);
        multiRenderer.setBarWidth(30);
        multiRenderer.setChartTitle("Income Chart");
        multiRenderer.setXTitle("Year 2013");
        multiRenderer.setYTitle("Amount in Dollars");
        //multiRenderer.setZoomLimits(1.0,0.7,1.0,3000.0);
        multiRenderer.setZoomButtonsVisible(true);
        //multiRenderer.setZoomEnabled(true, true);
        //multiRenderer.setPanEnabled(true, true);
        multiRenderer.setInScroll(true);
        multiRenderer.setXAxisMin(-0.5);
        multiRenderer.setXAxisMax(7);
        multiRenderer.setYAxisMin(0);
        multiRenderer.setYAxisMax(4000);

        multiRenderer.setMargins(new int[] {30, 50, 20, 10});
        multiRenderer.setClickEnabled(true);
        multiRenderer.setShowGridX(true);


        for (int i = 0; i < x.length; i++) {
            multiRenderer.addXTextLabel(i, mMonth[i]);
        }

        multiRenderer.addSeriesRenderer(incomeRenderer);
        return multiRenderer;
    }
private String[]mMonth=新字符串[]{“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”};
int[]x={0,1,2,3,4,5,6,7};
int[]收入={2000、2500、2700、3000、2800、3500、3700、3800};
公共静态最终字符串TYPE=“TYPE”;
私有XYmultiplesseriesdataset mDataset=getDemoDataset();
私有XYMultipleReseriesRenderer mrender=getDemoRenderer();
private GraphicalView mChartView;
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.xy_图表);
如果(mChartView==null){
LinearLayout布局=(LinearLayout)findViewById(R.id.chart);
mChartView=ChartFactory.getBarChartView(this,mDataset,mrender,Type.DEFAULT);
mrender.setSelectableBuffer(100);
layout.addView(mChartView,新的LayoutParams(LayoutParams.MATCH_父项,LayoutParams.MATCH_父项));
}否则{
mChartView.repaint();
}
mChartView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
//处理图表上的单击事件
SeriesSelection SeriesSelection=mChartView.getCurrentSeriesAndPoint();
if(seriesSelection==null){
Toast.makeText(NewTest.this,“无图表元素”,Toast.LENGTH_SHORT.show();
}否则{
对于(int i=0;i

}我看到您正在处理图表视图上的单击事件。每个酒吧系列都有自己的颜色。为了使一个条具有不同的颜色,它必须属于另一个系列。在这种情况下,您必须将该条从其所属的系列中删除,并添加另一个仅包含一个项目(选定条)的系列


第二次单击时,请反转上述操作。

对于仍对此感兴趣的用户。无需再添加一个系列(并且将以afaik单独绘制)。您只需扩展图表并按照下面的示例进行绘制。(在我的项目中,我使用我自己的滚动/缩放GestureDetector和ScaleGetDetector,我使用GestureDetector的onSingleTapUp而不是onClick)。使用下面类中的getView获取图表视图的实例:

public class SelectableBarChart extends BarChart {

private int selectedSeriesIndex = -1;
private int selectedBar = -1;
private final int highlightColor;
private OnBarSelectedListener barSelectedListener;

public static interface OnBarSelectedListener {
    void onBarSelected(SeriesSelection seriesSelection);
}

public void setBarSelectedListener(OnBarSelectedListener barSelectedListener) {
    this.barSelectedListener = barSelectedListener;
}

public static GraphicalView getView(Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, Type type, int highlightColor) {
    final SelectableBarChart chart = new SelectableBarChart(dataset, renderer, type, highlightColor);
    final GraphicalView graphicalView = new GraphicalView(context, chart);
    graphicalView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            chart.onClick(graphicalView);
        }
    });
    return graphicalView;
}

public void onClick(GraphicalView view) {
    onSelectionTap(view, view.getCurrentSeriesAndPoint());
}

protected void onSelectionTap(GraphicalView view, SeriesSelection seriesSelection) {
    if (seriesSelection != null) {
        selectedSeriesIndex = seriesSelection.getSeriesIndex();
        XYSeries selectedSeries = getDataset().getSeriesAt(selectedSeriesIndex);
        selectedBar = selectedSeries.getIndexForKey(seriesSelection.getXValue());
    }
    if (barSelectedListener != null)
        barSelectedListener.onBarSelected(seriesSelection);
    view.repaint();
}

@Override
public void drawSeries(Canvas canvas, Paint paint, List<Float> points, SimpleSeriesRenderer seriesRenderer, float yAxisValue, int seriesIndex, int startIndex) {
    int seriesNr = mDataset.getSeriesCount();
    boolean selectedSeries = seriesIndex == selectedSeriesIndex;
    int length = points.size();
    paint.setStyle(Paint.Style.FILL);
    float halfDiffX = getHalfDiffX(points, length, seriesNr);
    for (int i = 0; i < length; i += 2) {
        paint.setColor(selectedSeries && i == 2*(selectedBar-startIndex) ? highlightColor : seriesRenderer.getColor());
        float x = points.get(i);
        float y = points.get(i + 1);
        drawBar(canvas, x, yAxisValue, x, y, halfDiffX, seriesNr, seriesIndex, paint);
    }
    paint.setColor(seriesRenderer.getColor());
} 
公共类SelectableBarChart扩展了BarChart{
private int selectedSeriesIndex=-1;
private int selectedBar=-1;
私人最终int highlightColor;
专用OnBarSelectedListener barSelectedListener;
BarSelectedListener上的公共静态接口{
已选择的无效栏(序列选择序列选择);
}
public void setBarSelectedListener(OnBarSelectedListener barSelectedListener){
此.bar已选择Listener