我使用androidplot来显示一个固定大小的图形,我已经设置了一个BitmapShader来匹配每个Range区间,我需要设置这个着色器始终显示在图形上,因为它& #39;开始。
我的问题是:
我无法使用此着色器初始化图形(我已使用DemoApp作为基础测试它并且着色器正常工作)。每当我尝试使用getGridRect()方法获取GridRect时,无论我在活动创建期间调用此函数的位置,都会返回 null 。我只能在创建活动后设置阴影,但只能使用按钮或类似的东西。
我搜索了整个源代码,但在活动的生命周期中找不到此度量的位置。
答案 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);
}
});
...
}