Androidplot - 什么时候测量gridRect?

时间:2015-06-15 21:05:19

标签: android androidplot

我使用androidplot来显示一个固定大小的图形,我已经设置了一个BitmapShader来匹配每个Range区间,我需要设置这个着色器始终显示在图形上,因为它& #39;开始。

我的问题是:

我无法使用此着色器初始化图形(我已使用DemoApp作为基础测试它并且着色器正常工作)。每当我尝试使用getGridRect()方法获取GridRect时,无论我在活动创建期间调用此函数的位置,都会返回 null 。我只能在创建活动后设置阴影,但只能使用按钮或类似的东西。

我搜索了整个源代码,但在活动的生命周期中找不到此度量的位置。

1 个答案:

答案 0 :(得分: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);
        }

    });
    ...

  }