Android中的AchartEngine折线图-平移时线消失 [英] AchartEngineLine Chart in android - Line disappears while panning

查看:150
本文介绍了Android中的AchartEngine折线图-平移时线消失的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在android中的AchartEngine散点图中遇到问题。设置缩放到某个级别后平移时,每个点之间的线消失。
我曾尝试将hardwareAcceleration设置为false并将setLayerType设置为null以及全部。但是,问题仍然存在。

I am facing an issue in AchartEngine Scatter chart in android. The line between each point, disappears when panning after set zoom to a level. I had tried hardwareAcceleration to false and setLayerType to null and all. But, issue remains.

Achartengine版本1.1.0。
Android设备-Galaxy S4,S3。
您能帮我吗?

Achartengine version 1.1.0. Android device - Galaxy S4, S3. Can you please help me on this ?

屏幕截图位于 http://i.stack.imgur.com/hq5r4.png


谢谢

JRH

推荐答案

这是因为AbstarctChart ==> calculateDrawPoints()方法返回包含Float.NaN的float数组

Its because AbstarctChart==> calculateDrawPoints() method returns float array which contains Float.NaN

这是因为在计算过程中,有时值返回0,将值除以0后,我们得到Float.NaN
除以零的任何东西都是不确定的

Its because during calculation, sometimes value returns 0, and after dividing value with 0, we get Float.NaN Anything divided by zero is undefined

因此,请使用以下

private static float[] calculateDrawPoints(float p1x, float p1y, float p2x, float p2y,
      int screenHeight, int screenWidth) {
    float drawP1x = 0;
    float drawP1y;
    float drawP2x = 0;
    float drawP2y;

    if (p1y > screenHeight) {
      // Intersection with the top of the screen
      float m = (p2y - p1y) / (p2x - p1x);
      if (m != 0) {
        drawP1x = (screenHeight - p1y + m * p1x) / m;
      } else {
        drawP1x = (screenHeight - p1y + m * p1x);
      }
      drawP1y = screenHeight;

      if (drawP1x < 0) {
        // If Intersection is left of the screen we calculate the intersection
        // with the left border
        drawP1x = 0;
        drawP1y = p1y - m * p1x;
      } else if (drawP1x > screenWidth) {
        // If Intersection is right of the screen we calculate the intersection
        // with the right border
        drawP1x = screenWidth;
        drawP1y = m * screenWidth + p1y - m * p1x;
      }
    } else if (p1y < 0) {
      float n = p2x - p1x;
      float m = 0;
      if (n != 0) {
        m = (p2y - p1y) / n;
      } else {
        m = (p2y - p1y);
      }
      if (m != 0) {
        drawP1x = (-p1y + m * p1x) / m;
      } else {
        drawP1x = (-p1y + m * p1x);
      }
      drawP1y = 0;
      if (drawP1x < 0) {
        drawP1x = 0;
        drawP1y = p1y - m * p1x;
      } else if (drawP1x > screenWidth) {
        drawP1x = screenWidth;
        drawP1y = m * screenWidth + p1y - m * p1x;
      }
    } else {
      // If the point is in the screen use it
      drawP1x = p1x;
      drawP1y = p1y;
    }

    if (p2y > screenHeight) {
      float n = (p2x - p1x);
      float m = 0;
      if (n != 0) {
        m = (p2y - p1y) / n;
      } else {
        m = (p2y - p1y);
      }
      if (m != 0) {
        drawP2x = (screenHeight - p1y + m * p1x) / m;
      } else {
        drawP2x = (screenHeight - p1y + m * p1x);
      }

      drawP2y = screenHeight;
      if (drawP2x < 0) {
        drawP2x = 0;
        drawP2y = p1y - m * p1x;
      } else if (drawP2x > screenWidth) {
        drawP2x = screenWidth;
        drawP2y = m * screenWidth + p1y - m * p1x;
      }
    } else if (p2y < 0) {
      float n = (p2x - p1x);
      float m = 0;
      if (n != 0) {
        m = (p2y - p1y) / n;
      } else {
        m = (p2y - p1y);
      }
      if (m != 0) {
        drawP2x = (-p1y + m * p1x) / m;
      } else {
        drawP2x = (-p1y + m * p1x);
      }
      drawP2y = 0;
      if (drawP2x < 0) {
        drawP2x = 0;
        drawP2y = p1y - m * p1x;
      } else if (drawP2x > screenWidth) {
        drawP2x = screenWidth;
        drawP2y = m * screenWidth + p1y - m * p1x;
      }
    } else {
      // If the point is in the screen use it
      drawP2x = p2x;
      drawP2y = p2y;
    }
    return new float[] { drawP1x, drawP1y, drawP2x, drawP2y };
  }

这将解决您的问题

这篇关于Android中的AchartEngine折线图-平移时线消失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆