4

I want to use graph in widget. Like This! I want to make graph using AchartEngine. Graph using AchartEngine is working in normal app but how to implement it in widget?

Here is My code:

public class MainActivity extends ActionBarActivity {

    private XYMultipleSeriesDataset mDataset = getDemoDataset();
    private XYMultipleSeriesRenderer mRenderer = getDemoRenderer();
    private GraphicalView mChartView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setRendererStyling();

        if (mChartView == null) {
            LinearLayout layout = (LinearLayout) findViewById(R.id.chart);

            mChartView = ChartFactory.getLineChartView(MainActivity.this,
                        mDataset, mRenderer);

            mRenderer.setSelectableBuffer(100);

            layout.addView(mChartView, new LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        } else {
            mChartView.repaint();
        }

    }

    private void setRendererStyling() {

        mRenderer.setApplyBackgroundColor(true);
        mRenderer.setBackgroundColor(Color.argb(100, 50, 50, 50));
        mRenderer.setAxisTitleTextSize(16);
        mRenderer.setChartTitleTextSize(20);
        mRenderer.setLabelsTextSize(15);
        mRenderer.setLegendTextSize(15);
        mRenderer.setMargins(new int[] { 20, 30, 15, 0 });
        mRenderer.setZoomButtonsVisible(true);
        mRenderer.setPointSize(8);

    }

    private XYMultipleSeriesRenderer getDemoRenderer() {
        XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
        renderer.setMargins(new int[] { 20, 30, 15, 0 });
        XYSeriesRenderer r = new XYSeriesRenderer();
        r.setColor(Color.BLUE);
        r.setPointStyle(PointStyle.SQUARE);
        // r.setFillBelowLine(true);
        // r.setFillBelowLineColor(Color.WHITE);
        r.setFillPoints(true);
        renderer.addSeriesRenderer(r);

        r = new XYSeriesRenderer();
        r.setPointStyle(PointStyle.CIRCLE);
        r.setColor(Color.GREEN);
        r.setFillPoints(true);
        renderer.addSeriesRenderer(r);
        renderer.setAxesColor(Color.DKGRAY);
        renderer.setLabelsColor(Color.LTGRAY);
        return renderer;
    }

    private XYMultipleSeriesDataset getDemoDataset() {

        double[] seriesFirstY = { 20, -20, 63, 150, -49, 24, 91, -34, -8 };
        double[] seriesSecondY = { 10, 70, -40, -20, 130, 24, 167, -34, 80 };

        double[] seriesFirstX = { 0, 8, 14, 20, 35, 40, 56, 80, 109 };
        double[] seriesSecondX = { 0, 24, 67, 75, 95, 134, 149, 168, 180 };

        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();

        XYSeries firstSeries = new XYSeries("series One");
        for (int i = 0; i < 9; i++)
            firstSeries.add(seriesFirstX[i], seriesFirstY[i]);
        dataset.addSeries(firstSeries);

        XYSeries secondSeries = new XYSeries("series Two");
        for (int j = 0; j < 9; j++)
            secondSeries.add(seriesSecondX[j], seriesSecondY[j]);
        dataset.addSeries(secondSeries);
        return dataset;
    }

I want to use Above code in widget app. Please help me.!!

public class MainActivity extends AppWidgetProvider {

    private XYMultipleSeriesDataset mDataset = getDemoDataset();
    private XYMultipleSeriesRenderer mRenderer = getDemoRenderer();
    private GraphicalView mChartView;

    @SuppressLint("NewApi")
    @SuppressWarnings("deprecation")
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {

        for (int i = 0; i < appWidgetIds.length; i++) {

            int currentWidgetId = appWidgetIds[i];

            RemoteViews views = new RemoteViews(context.getPackageName(),
                    R.layout.activity_main);

            setRendererStyling();

            if (mChartView == null) {

                LayoutInflater inflater = LayoutInflater.from(context);
                View rowView = inflater.inflate(R.layout.second, null, true);

                LinearLayout layout = (LinearLayout) rowView
                        .findViewById(R.id.chart);

                mChartView = ChartFactory.getLineChartView(context, mDataset,
                        mRenderer);

                mRenderer.setSelectableBuffer(100);

                layout.addView(mChartView, new LayoutParams(
                        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

                // views.apply(context, layout);

                views.setImageViewBitmap(R.id.img_view,
                        layout.getDrawingCache());

                appWidgetManager.updateAppWidget(currentWidgetId, views);
                Toast.makeText(context, "widget added", Toast.LENGTH_SHORT)
                        .show();

            } else {
                mChartView.repaint();
            }

        }
    }
}

I tried this code, but its does not work... Please help me.

Aleksandar G
  • 1,163
  • 2
  • 20
  • 25
Alpa Mori
  • 260
  • 1
  • 11

0 Answers0