首页 文章

MPAndroidChart:在BarChart中将X轴的标签旋转90度

提问于
浏览
5

来自MPAndroidChart的BarChart的xAxes中的文字太长了 . 如何将xAxes的标签旋转90度?

4 回答

  • 21

    现在可以在库版本2.1.6中使用

    试试这个

    XAxis xAxis=barChart.getXAxis();
    xAxis.setLabelRotationAngle(-45);
    
  • 0

    您可以隐藏xAxis标签并将自定义文本视图设置为垂直 . 这是垂直文本视图的代码 .

    public class VerticalTextView extends TextView {
    final boolean topDown;
    
    public VerticalTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        final int gravity = getGravity();
        if (Gravity.isVertical(gravity) && (gravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) {
            setGravity((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) | Gravity.TOP);
            topDown = false;
        } else
            topDown = true;
    }
    
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(heightMeasureSpec, widthMeasureSpec);
        setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
    }
    
    @Override
    protected void onDraw(Canvas canvas) {
        TextPaint textPaint = getPaint();
        textPaint.setColor(getCurrentTextColor());
        textPaint.drawableState = getDrawableState();
    
        canvas.save();
    
        if (topDown) {
            canvas.translate(getWidth(), 0);
            canvas.rotate(90);
        } else {
            canvas.translate(0, getHeight());
            canvas.rotate(-90);
        }
    
        canvas.translate(getCompoundPaddingLeft(), getExtendedPaddingTop());
    
        getLayout().draw(canvas);
        canvas.restore();
    }
    

    }

  • 1

    这很简单,试试这个......

    XAxis xAxis = barChart.getXAxis();
    xAxis.setLabelRotationAngle(90);
    
  • 1

    只需覆盖 XAxisRendererrenderAxisLabels(c: Canvas) 方法 .

    并将其设置为barChart itemView.barChart.setXAxisRenderer(CustomBarChartRenderer(itemView.barChart.viewPortHandler, itemView.barChart.xAxis, itemView.barChart.rendererXAxis.transformer))

    import android.graphics.Canvas
    import com.github.mikephil.charting.renderer.XAxisRenderer
    import com.github.mikephil.charting.utils.ViewPortHandler
    import com.github.mikephil.charting.components.XAxis
    import com.github.mikephil.charting.utils.MPPointF
    import com.github.mikephil.charting.utils.Transformer
    
    class CustomBarChartRenderer(viewPortHandler: ViewPortHandler, xAxis: XAxis, trans: Transformer) : XAxisRenderer(viewPortHandler, xAxis, trans) {
    
        override fun renderAxisLabels(c: Canvas) {
    
            if (!mXAxis.isEnabled || !mXAxis.isDrawLabelsEnabled)
                return
    
            val yoffset = mXAxis.yOffset
    
            mAxisLabelPaint.typeface = mXAxis.typeface
            mAxisLabelPaint.textSize = mXAxis.textSize
            mAxisLabelPaint.color = mXAxis.textColor
    
            val pointF = MPPointF.getInstance(0f, 0f)
            if (mXAxis.position == XAxis.XAxisPosition.TOP) {
                pointF.x = 0.5f
                pointF.y = 1.0f
                drawLabels(c, mViewPortHandler.contentTop() - yoffset, pointF)
    
            } else if (mXAxis.position == XAxis.XAxisPosition.TOP_INSIDE) {
                pointF.x = 0.5f
                pointF.y = 1.0f
                drawLabels(c, mViewPortHandler.contentBottom() - yoffset, pointF)
    
            } else if (mXAxis.position == XAxis.XAxisPosition.BOTTOM) {
                pointF.x = 0.5f
                pointF.y = 0.0f
                drawLabels(c, mViewPortHandler.contentBottom() + yoffset, pointF)
    
            } else if (mXAxis.position == XAxis.XAxisPosition.BOTTOM_INSIDE) {
                pointF.x = 0.5f
                pointF.y = 0.0f
                drawLabels(c, mViewPortHandler.contentBottom() - yoffset - mXAxis.mLabelRotatedHeight.toFloat(), pointF)
    
            } else { // BOTH SIDED
                pointF.x = 0.5f
                pointF.y = 1.0f
                drawLabels(c, mViewPortHandler.contentTop() - yoffset, pointF)
                pointF.x = 0.5f
                pointF.y = 0.0f
                drawLabels(c, mViewPortHandler.contentBottom() + yoffset, pointF)
            }
            MPPointF.recycleInstance(pointF)
        }
    }
    

相关问题