MPAndroid - 滚动时捕捉x位置

时间:2016-02-18 14:54:23

标签: android mpandroidchart

经过几个小时的尝试后,我正在寻找一些关于如何向MPAndroid添加快照滚动机制的提示。基本上我希望5个可见条对齐,这样它们就完全可见并居中。我现在导入了库源代码,因为看起来没有其他方法可以更改computeScroll(BarLineChartTouchListener)中的代码。

编辑: 澄清 - 我正在显示大约20个条形图但是图表被缩放以便用户可以水平滚动。困扰我的是它没有自动对齐,因此第一个可见的条形可能会被剪掉一半。我正在寻找捕捉效果,它会将位置四舍五入到最接近的条形宽度,留下5个完全可见的条形。

1 个答案:

答案 0 :(得分:2)

我最终在BarLineChartBase.java中添加了以下函数。我知道它远非优雅,但似乎做得很好。它仅限于targetApi> 11,因为ValueAnimator。对于较低的API(我不能满足),您可能需要查看nineoldandroids或其他一些动画循环技术。

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void alignX() {
        int count = this.getValueCount();
        int xIndex = this.getLowestVisibleXIndex() + Math.round( (this.getHighestVisibleXIndex() - this.getLowestVisibleXIndex()) / 2.0f );
        float xsInView = this.getXAxis().getValues().size() / this.getViewPortHandler().getScaleX();
        Transformer mTrans = this.getTransformer(YAxis.AxisDependency.LEFT);
        float[] pts = new float[] { xIndex - xsInView / 2f, 0 };
        mTrans.pointValuesToPixel(pts);
        final Matrix save = new Matrix();
        save.set(this.getViewPortHandler().getMatrixTouch());
        final float x = pts[0] - this.getViewPortHandler().offsetLeft();
        final int frames = 20;
        ValueAnimator valueAnimator = new ValueAnimator().ofInt(0, frames);
        valueAnimator.setDuration(500);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            int prev = -1;
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                if( (int) animation.getAnimatedValue() > prev ) {
                    save.postTranslate( -x / (float)frames, 0);
                    BarLineChartBase.this.getViewPortHandler().refresh(save, BarLineChartBase.this, true);
                }
                prev = (int) animation.getAnimatedValue();
            }
        });
        valueAnimator.start();
}

我在computeScroll的{​​{1}}函数末尾触发它。

我保留了变量的名称,因为我从BarLineChartTouchListenerMoveViewJob等函数中复制了代码。由于它只在x轴上对齐 - 我删除了Y轴计算并改为使用了零。欢迎任何优化,特别是来自作者@PhilippJahoda。