在折线图上显示图像而不是圆圈

2023-11-30

我创建了一个LineChart使用 MPAndroidChart 库,一切都很好。

现在我想做的是显示一个可绘制的(图像),而不是图表上每个条目的默认圆圈。

我已经尝试了 API 中的很多选项,但没有成功。

谁能告诉我我该怎么做?


最后,在尝试了很多事情之后,在 @David Rawson 的建议和这篇文章的帮助下MPAndroidChart LineChart 自定义突出显示可绘制

我已成功创建一个自定义渲染器,它将图表中的默认圆形图像替换为提供的图像。

以下是解决方案的代码片段。

class ImageLineChartRenderer extends LineChartRenderer {
private final LineChart lineChart;
private final Bitmap image;


ImageLineChartRenderer(LineChart chart, ChartAnimator animator, ViewPortHandler viewPortHandler, Bitmap image) {
    super(chart, animator, viewPortHandler);
    this.lineChart = chart;
    this.image = image;
}

private float[] mCirclesBuffer = new float[2];

@Override
protected void drawCircles(Canvas c) {
    mRenderPaint.setStyle(Paint.Style.FILL);
    float phaseY = mAnimator.getPhaseY();
    mCirclesBuffer[0] = 0;
    mCirclesBuffer[1] = 0;
    List<ILineDataSet> dataSets = mChart.getLineData().getDataSets();

    //Draw bitmap image for every data set with size as radius * 10, and store it in scaled bitmaps array
    Bitmap[] scaledBitmaps = new Bitmap[dataSets.size()];
    float[] scaledBitmapOffsets = new float[dataSets.size()];
    for (int i = 0; i < dataSets.size(); i++) {
        float imageSize = dataSets.get(i).getCircleRadius() * 10;
        scaledBitmapOffsets[i] = imageSize / 2f;
        scaledBitmaps[i] = scaleImage((int) imageSize);
    }

    for (int i = 0; i < dataSets.size(); i++) {
        ILineDataSet dataSet = dataSets.get(i);

        if (!dataSet.isVisible() || !dataSet.isDrawCirclesEnabled() || dataSet.getEntryCount() == 0)
            continue;

        mCirclePaintInner.setColor(dataSet.getCircleHoleColor());
        Transformer trans = mChart.getTransformer(dataSet.getAxisDependency());
        mXBounds.set(mChart, dataSet);


        int boundsRangeCount = mXBounds.range + mXBounds.min;
        for (int j = mXBounds.min; j <= boundsRangeCount; j++) {
            Entry e = dataSet.getEntryForIndex(j);
            if (e == null) break;
            mCirclesBuffer[0] = e.getX();
            mCirclesBuffer[1] = e.getY() * phaseY;
            trans.pointValuesToPixel(mCirclesBuffer);
            if (!mViewPortHandler.isInBoundsRight(mCirclesBuffer[0]))
                break;
            if (!mViewPortHandler.isInBoundsLeft(mCirclesBuffer[0]) || !mViewPortHandler.isInBoundsY(mCirclesBuffer[1]))
                continue;

            if (scaledBitmaps[i] != null) {
                c.drawBitmap(scaledBitmaps[i],
                        mCirclesBuffer[0] - scaledBitmapOffsets[i],
                        mCirclesBuffer[1] - scaledBitmapOffsets[i],
                        mRenderPaint);
            }
        }
    }

}


private Bitmap scaleImage(int radius) {
    return Bitmap.createScaledBitmap(image, radius, radius, false);
}

希望这对某人有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在折线图上显示图像而不是圆圈 的相关文章

随机推荐

  • 替换失败的模板专门化

    考虑这个函数 template
  • 使用 MongoDB 聚合框架四舍五入到小数点后两位

    我正在使用 mongodb 聚合框架并进行一些计算 如下所示 db RptAgg aggregate group id Region RegionTxt Mth Month ActSls sum ActSls PlnSls sum PlnS
  • 优化列表视图,包含 1k 对象列表

    我想知道是否有任何优化的方法来创建一个可容纳超过 1k 对象的适配器 我尝试了以下方法 但结果仍然不乐观 A 视图支架模式 它有帮助 但当对象尺寸增加时 它开始出现问题 B 注意 我可以使用分页 api 来传递定义数量的对象 但我的场景中没
  • 如何在PHP编辑页面中选中单选按钮?

    在 php 形式中 我将数据从单选按钮获取到数据库 效果很好 但是在编辑页面中如何从数据库中获取选中的值 td align left valign middle td
  • Linq to Entities - SQL“IN”子句

    在 T SQL 中 您可以有如下查询 SELECT FROM Users WHERE User Rights IN Admin User Limited 您将如何在 LINQ to Entities 查询中复制它 有可能吗 你需要彻底改变你
  • 如何生成某个公历年到回历的日期

    我想自动适应或生成一年中的日子 从公历到回历 我的意思是您想选择或写入年份作为示例 选择2015年 获取公历 2015 年的所有日期 然后将其转换为回历并显示回历列表 所以你想返回 2 个列表 list1 公历天列表 vs 另一个列表2 h
  • 添加 QLPreviewController 作为子视图不会加载 PDF

    我正在尝试添加 QLPreviewController 的视图作为子视图 不 我不能使用导航控制器或模式 它仅显示 QLPreviewController 的结构背景 我创建一个并将其添加为子视图 QLPreviewController p
  • 如何设置自定义控件的描述以显示在工具箱中?

    我想在设计时添加一个文本 告诉设计者我的控件是什么到我的自定义控件中 就像这里的 VS 默认控件一样 我努力了 summary但这对我不起作用 如何做呢 你可以用以下方式装饰你的班级Description属性 然后 当您使用以下命令将控件添
  • 如何根据自动缩小的标签为多个标签设置相同的字体比例?

    我有 4 个标签视图 其中一个应该显示较大的数值并设置为自动收缩 我的要求是在自动调整该标签以适合其内容后 将该标签设置为与其他标签相同的字体缩放或大小 以便文本内容在整个过程中看起来统一 设置最小比例因子对其他标签没有帮助 因为它们的内容
  • 为 SBT 依赖项设置 javac 选项

    我在编译通过 GIT 加载的 Java 依赖项时遇到问题 object ApplicationBuild extends Build lazy val project Project root file dependsOn RootProj
  • 使用 ADODB 连接打开存储在 SharePoint 上作为数据源的 Excel 文件

    我正在尝试使用以下 VBA 代码片段打开 Excel 文件作为数据源 Dim cn As ADODB Connection Set cn New ADODB Connection With cn Provider Microsoft ACE
  • 是否可以通过积分加速度计数据随时间的变化来计算速度?

    我想知道是否可以使用 线性 加速度计和指南针来计算速度而不使用位置服务 我想通过计算北 西 上轴的加速度分量并随着时间的推移对它们进行积分来做到这一点 那行得通吗 一般来说 Android 设备上的加速度计噪音太大 无法整合信号并获取速度
  • 如何使用 OpenGL 保存 OpenGL 绘图?

    我用 OpenGL 命令绘制屏幕 我必须将此屏幕保存为 bmp 或 png 格式 但我做不到 我正在使用 glReadpixels 但我无法继续 如何使用 OpenGL 在 C 中保存此绘图 它来了 你必须包含 WinGDI h 我认为 G
  • 使用 JavaScript 按类替换内容

    如何使用 Javascript 按类选择元素来修改内容 实际上我尝试使用这个 document getElementsByClassName myClass innerHTML new content 但什么也没做 如果我通过 ID 选择元
  • 将 DataGrid 列宽度绑定到另一个 DataGrid 的两列

    问题 我该如何绑定StatName Width to Samp1 ActualWidth Samp2 ActualWidth 子问题 为什么是我的WidthConverter函数从未执行 断点从未命中 什么是正确的
  • 为什么线程优先级没有作用?

    namespace HelloWorld class Program static void Main string args Thread t new Thread gt WriteY 11 t Start t IsBackground
  • 将 scipy.quad 与 iε 技巧一起使用:结果不佳

    为了规避柯西原理值 我尝试将使用小位移 i 的积分积分到复平面中以避开极点 然而 从下图可以看出 结果很糟糕 此结果的代码如下所示 您有如何改进此方法的想法吗 为什么它不起作用 我已经尝试更改 或积分中的极限 编辑 我将方法 cauchy
  • JavaScript中将非纯函数变成纯函数的策略是什么

    我开始学习 JavaScript 函数式编程 这可能是一个愚蠢的问题 但我正在尝试解决以函数方式编写的非纯函数 我的问题是应该使用什么策略来在函数式编程范例中实现这一点 const crypto require crypto const e
  • 如何在调用方法之前使方法被被动调用

    就像这样 一个类有一个名为 sayHello 的方法 当类的实例调用 sayHello 时 在调用 sayHello 之前会自动调用另一个类中的方法 示例代码可以是这样的 public class Robot public static v
  • 在折线图上显示图像而不是圆圈

    我创建了一个LineChart使用 MPAndroidChart 库 一切都很好 现在我想做的是显示一个可绘制的 图像 而不是图表上每个条目的默认圆圈 我已经尝试了 API 中的很多选项 但没有成功 谁能告诉我我该怎么做 最后 在尝试了很多