2015-05-22 2 views
-3

enter image description hereКак создать графический указатель линейного графика в android?

Может ли кто-нибудь помочь мне создать линейный график, похожий на изображение в android.

+0

что вы уже пробовали? – demonplus

+0

Я прошел через некоторый apis как achartengine, AndroidPlot, но не смог найти график с указателем –

ответ

2

Используя AChartEngine, вы можете добавить изображение после внесения небольших изменений в класс AchartEngine - XYMultipleSeriesRenderer. Наряду с текстовыми надписями X Axis, текстовыми надписями Y-оси, добавьте настраиваемое свойство для доставки вашего растрового изображения.

/** The X axis text labels. */ 
    private Map<Double, String> mXTextLabels = new HashMap<Double, String>(); 
    /** The Bitmap corresponding to event. */ 
    public Map<Double, Bitmap> mEventBitmaps = new HashMap<Double, Bitmap>(); 

Затем в методе жки вашей требуемой диаграммы, вы можете восстановить соответствующее изображение из seriesRenderer ..

private void drawBar(Canvas canvas, float xMin, float yMin, float xMax, float yMax, int scale, 
     int seriesIndex, Paint paint, double barIndex) { 
    SimpleSeriesRenderer renderer = mRenderer.getSeriesRendererAt(seriesIndex); 
....... 
....... 
Bitmap eventflag = mRenderer.getEventBitmap(barIndex); 
double offset = Math.round(xMax) - Math.round(xMin) - eventflag.getWidth(); 
canvas.drawBitmap(eventflag, Math.round(xMin) + (int) offset/2, Math.round(yMin) 
       - (2*eventflag.getHeight()), paint); 

Вы должны ознакомиться с XYMultipleSeriesRenderer в AchartEngine перед погружением глубоко в этот ,

Наконец, в вашем классе проекта (деятельности/фрагменте), где вы показываете диаграмму, вы можете указать растровые изображения для каждой точки на графике следующим образом.

public XYMultipleSeriesRenderer getBarRenderer() { 

     if(list == null || list.isEmpty()){ 
      return null; 
     } 

     // Creating a XYMultipleSeriesRenderer to customize the whole chart 
     XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer(); 

     multiRenderer.setXLabels(0); 
     /*multiRenderer.setYLabels(0);*/ 
     for(int i=0; i< list.size();i++){ 
      ReportsList ma = list.get(i); 
      multiRenderer.addXTextLabel(i, ma.getMinutes()); 
      multiRenderer.addBarColor(i, "#" + ma.getColor()); 
      String eventType = ma.getEvent(); 
      int drawableId = getEventBitMap(eventType); 
      if(drawableId != -1){ 
       multiRenderer.addEventBitmap(i, BitmapFactory.decodeResource(getResources(), drawableId)); 

      } 

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