2015-06-15 4 views
1

Я использую androidplot для отображения графика фиксированного размера, который я установил BitmapShader для соответствия каждому интервалу диапазона, и мне нужно настроить этот шейдер всегда отображаемым на графике, так как он начинается.Androidplot - когда измеряется gridRect?

Моя проблема:

Я не могу инициализировать граф с шейдера (я проверил его, используя в качестве основы DemoApp и шейдер работает должным образом). Каждый раз, когда я пытаюсь получить GridRect с помощью метода getGridRect(), он возвращает null, независимо от того, где я вызываю эту функцию во время создания действия. Я могу установить только шейдер после создания активности, но только с помощью кнопки или чего-то подобного.

Я искал весь исходный код, но не смог найти, где эта мера происходит во время жизненного цикла деятельности.

ответ

0

К сожалению, у меня не было возможности получить правильную мешалку во время ее творчества, но я нашел способ обойти.

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

отрывок из моего кода:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    ... 
    mPlot.getGraphWidget().setPaddingBottom(20); 
    mPlot.getGraphWidget().setPaddingTop(20); 
    //Added a ViewTreeObserver to be sure when the Plot was measured. 
    mPlot.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

     @Override 
     public void onGlobalLayout() { 
      mPlot.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
      //Avoid the factory trying to scale bitmap according to Display density 
      Options options = new BitmapFactory.Options(); 
      options.inScaled = false; 
      Bitmap bm = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.chartbackground, options), 1, (int) mPlot.getHeight() - 40, false); 
      BitmapShader backgroundShader = new BitmapShader(bm, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); 
      Matrix shaderMatrix = new Matrix(); 
      //This matrix references always stayed the same even if the plot changed its size. 
      shaderMatrix.setTranslate(49.6875f, 30.75f); 
      backgroundShader.setLocalMatrix(shaderMatrix); 
      mPlot.getGraphWidget().getGridBackgroundPaint().setShader(backgroundShader); 
      //Setting the background to be a little bit translucid. 
      mPlot.getGraphWidget().getGridBackgroundPaint().setAlpha(90); 
     } 

    }); 
    ... 

    }