Android中的AchartEngine折线图-平移时线消失 [英] AchartEngineLine Chart in android - Line disappears while panning
问题描述
我在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屋!