|
@@ -42,11 +42,18 @@ import android.view.View;
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
public class LineGraph extends View {
|
|
|
-
|
|
|
- private ArrayList<Line> lines = new ArrayList<Line>();
|
|
|
+
|
|
|
+ public interface AxisDataConverter {
|
|
|
+ public String convertDataForX_Position(double x);
|
|
|
+ public String convertDataForY_Position(double y);
|
|
|
+ }
|
|
|
+
|
|
|
+ private final static int AXIS_LABEL_FONT_SIZE = 10;
|
|
|
+
|
|
|
+ private ArrayList<Line> lines = new ArrayList<Line>();
|
|
|
Paint paint = new Paint();
|
|
|
- private float minY = 0, minX = 0;
|
|
|
- private float maxY = 0, maxX = 0;
|
|
|
+ private double minY = 0, minX = 0;
|
|
|
+ private double maxY = 0, maxX = 0;
|
|
|
private double rangeYRatio = 0;
|
|
|
private double rangeXRatio = 0;
|
|
|
private boolean isMaxYUserSet = false;
|
|
@@ -56,14 +63,39 @@ public class LineGraph extends View {
|
|
|
private OnPointClickedListener listener;
|
|
|
private Bitmap fullImage;
|
|
|
private boolean shouldUpdate = false;
|
|
|
+
|
|
|
+ static final float bottomPadding = 40, topPadding = 10;
|
|
|
+ static final float rightPadding = 10;
|
|
|
+ static final float leftPadding = 50;
|
|
|
+ static final float sidePadding = rightPadding + leftPadding;
|
|
|
+
|
|
|
+ private float xAxisStep = 4;
|
|
|
+ private float yAxisStep = 4;
|
|
|
+
|
|
|
+ private AxisDataConverter converter;
|
|
|
+
|
|
|
+ private Context mContext;
|
|
|
+
|
|
|
+ public void setxAxisStep(float step){
|
|
|
+ this.xAxisStep = step;
|
|
|
+ }
|
|
|
+ public void setYAxisStep(float step){
|
|
|
+ this.yAxisStep = step;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setConverter(AxisDataConverter conv){
|
|
|
+ this.converter = conv;
|
|
|
+ }
|
|
|
|
|
|
public LineGraph(Context context){
|
|
|
super(context);
|
|
|
+ this.mContext = context;
|
|
|
this.setWillNotDraw(false);
|
|
|
}
|
|
|
|
|
|
public LineGraph(Context context, AttributeSet attrs) {
|
|
|
super(context, attrs);
|
|
|
+ this.mContext = context;
|
|
|
this.setWillNotDraw(false);
|
|
|
}
|
|
|
public void setMinY(float minY){
|
|
@@ -172,13 +204,15 @@ public class LineGraph extends View {
|
|
|
}
|
|
|
|
|
|
public void resetYLimits(){
|
|
|
- float range = getMaxY() - getMinY();
|
|
|
+ double range = getMaxY() - getMinY();
|
|
|
setRangeY(getMinY()-range*getRangeYRatio(), getMaxY()+range*getRangeYRatio());
|
|
|
- }
|
|
|
+ isMaxYUserSet = false;
|
|
|
+ }
|
|
|
public void resetXLimits(){
|
|
|
- float range = getMaxX() - getMinX();
|
|
|
+ double range = getMaxX() - getMinX();
|
|
|
setRangeX(getMinX()-range*getRangeXRatio(), getMaxX()+range*getRangeXRatio());
|
|
|
- }
|
|
|
+ isMaxXUserSet = false;
|
|
|
+ }
|
|
|
public void resetLimits() {
|
|
|
resetYLimits();
|
|
|
resetXLimits();
|
|
@@ -209,21 +243,24 @@ public class LineGraph extends View {
|
|
|
maxY = max;
|
|
|
isMaxYUserSet = true;
|
|
|
}
|
|
|
- private void setRangeY(double min, double max){
|
|
|
- minY = (float)min;
|
|
|
- maxY = (float)max;
|
|
|
- isMaxXUserSet = true;
|
|
|
+ public void setRangeY(double min, double max){
|
|
|
+ minY = min;
|
|
|
+ maxY = max;
|
|
|
+ isMaxYUserSet = true;
|
|
|
}
|
|
|
public void setRangeX(float min, float max) {
|
|
|
minX = min;
|
|
|
maxX = max;
|
|
|
- }
|
|
|
+ isMaxXUserSet = true;
|
|
|
+ }
|
|
|
private void setRangeX(double min, double max){
|
|
|
- minX = (float)min;
|
|
|
- maxX = (float)max;
|
|
|
- }
|
|
|
- public float getMaxY(){
|
|
|
- float max = lines.get(0).getPoint(0).getY();
|
|
|
+ minX = min;
|
|
|
+ maxX = max;
|
|
|
+ isMaxXUserSet = true;
|
|
|
+ }
|
|
|
+ public double getMaxY(){
|
|
|
+ if (isMaxYUserSet)return maxY;
|
|
|
+ double max = lines.get(0).getPoint(0).getY();
|
|
|
for (Line line : lines){
|
|
|
for (LinePoint point : line.getPoints()){
|
|
|
max = point.getY() > max ? point.getY() : max;
|
|
@@ -233,8 +270,9 @@ public class LineGraph extends View {
|
|
|
return maxY;
|
|
|
}
|
|
|
|
|
|
- public float getMinY(){
|
|
|
- float min = lines.get(0).getPoint(0).getY();
|
|
|
+ public double getMinY(){
|
|
|
+ if (isMaxYUserSet)return minY;
|
|
|
+ double min = lines.get(0).getPoint(0).getY();
|
|
|
for (Line line : lines){
|
|
|
for (LinePoint point : line.getPoints()){
|
|
|
min = point.getY() < min ? point.getY() : min;
|
|
@@ -243,16 +281,21 @@ public class LineGraph extends View {
|
|
|
minY = min;
|
|
|
return minY;
|
|
|
}
|
|
|
- public float getMinLimY(){
|
|
|
+ public double getMinLimY(){
|
|
|
return minY;
|
|
|
}
|
|
|
- public float getMaxLimY(){
|
|
|
+ public double getMaxLimY(){
|
|
|
return maxY;
|
|
|
}
|
|
|
- public float getMinLimX(){
|
|
|
- return minX;
|
|
|
+ public double getMinLimX(){
|
|
|
+ if (isMaxXUserSet) {
|
|
|
+ return minX;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return getMinX();
|
|
|
+ }
|
|
|
}
|
|
|
- public float getMaxLimX(){
|
|
|
+ public double getMaxLimX(){
|
|
|
if (isMaxXUserSet) {
|
|
|
return maxX;
|
|
|
}
|
|
@@ -260,22 +303,22 @@ public class LineGraph extends View {
|
|
|
return getMaxX();
|
|
|
}
|
|
|
}
|
|
|
- public float getMaxX(){
|
|
|
- float max = lines.size() > 0 ? lines.get(0).getPoint(0).getX() : 0;
|
|
|
+ public double getMaxX(){
|
|
|
+ double max = lines.size() > 0 ? lines.get(0).getPoint(0).getX() : 0;
|
|
|
for (Line line : lines){
|
|
|
for (LinePoint point : line.getPoints()){
|
|
|
- max = point.getX() > max ? point.getX() : max;
|
|
|
+ max =Math.max(point.getX(), max);// point.getX() > max ? point.getX() : max;
|
|
|
}
|
|
|
}
|
|
|
maxX = max;
|
|
|
return maxX;
|
|
|
|
|
|
}
|
|
|
- public float getMinX(){
|
|
|
- float min = lines.size() > 0 ? lines.get(0).getPoint(0).getX() : 0;
|
|
|
+ public double getMinX(){
|
|
|
+ double min = lines.size() > 0 ? lines.get(0).getPoint(0).getX() : 0;
|
|
|
for (Line line : lines){
|
|
|
for (LinePoint point : line.getPoints()){
|
|
|
- min = point.getX() < min ? point.getX() : min;
|
|
|
+ min =Math.min(point.getX(), min);// point.getX() < min ? point.getX() : min;
|
|
|
}
|
|
|
}
|
|
|
minX = min;
|
|
@@ -283,7 +326,14 @@ public class LineGraph extends View {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
+ private String getX_AxisTitle(double x){
|
|
|
+ if (this.converter == null)return "" + (long)x;
|
|
|
+ return this.converter.convertDataForX_Position(x);
|
|
|
+ }
|
|
|
+ private String getY_AxisTitle(double y){
|
|
|
+ if (this.converter == null)return "" + (long)y;
|
|
|
+ return this.converter.convertDataForY_Position(y);
|
|
|
+ }
|
|
|
|
|
|
public void onDraw(Canvas ca) {
|
|
|
super.onDraw(ca);
|
|
@@ -295,91 +345,26 @@ public class LineGraph extends View {
|
|
|
paint.reset();
|
|
|
Path path = new Path();
|
|
|
|
|
|
- float bottomPadding = 10, topPadding = 10;
|
|
|
- float sidePadding = 10;
|
|
|
+
|
|
|
float usableHeight = getHeight() - bottomPadding - topPadding;
|
|
|
float usableWidth = getWidth() - 2*sidePadding;
|
|
|
|
|
|
- float maxY = getMaxLimY();
|
|
|
- float minY = getMinLimY();
|
|
|
- float maxX = getMaxLimX();
|
|
|
- float minX = getMinLimX();
|
|
|
+ double maxY = getMaxLimY();
|
|
|
+ double minY = getMinLimY();
|
|
|
+ double maxX = getMaxLimX();
|
|
|
+ double minX = getMinLimX();
|
|
|
|
|
|
-
|
|
|
- int lineCount = 0;
|
|
|
- for (Line line : lines){
|
|
|
- int count = 0;
|
|
|
- float firstXPixels = 0, lastXPixels = 0, newYPixels = 0;
|
|
|
- float lastYPixels = 0, newXPixels = 0;
|
|
|
-
|
|
|
- if (lineCount == lineToFill){
|
|
|
- paint.setColor(Color.BLACK);
|
|
|
- paint.setAlpha(30);
|
|
|
- paint.setStrokeWidth(2);
|
|
|
- for (int i = 10; i-getWidth() < getHeight(); i = i+20){
|
|
|
- canvas.drawLine(i, getHeight()-bottomPadding, 0, getHeight()-bottomPadding-i, paint);
|
|
|
- }
|
|
|
-
|
|
|
- paint.reset();
|
|
|
-
|
|
|
- paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.CLEAR));
|
|
|
- for (LinePoint p : line.getPoints()){
|
|
|
- float yPercent = (p.getY()-minY)/(maxY - minY);
|
|
|
- float xPercent = (p.getX()-minX)/(maxX - minX);
|
|
|
- if (count == 0){
|
|
|
- lastXPixels = sidePadding + (xPercent*usableWidth);
|
|
|
- lastYPixels = getHeight() - bottomPadding - (usableHeight*yPercent);
|
|
|
- firstXPixels = lastXPixels;
|
|
|
- path.moveTo(lastXPixels, lastYPixels);
|
|
|
- } else {
|
|
|
- newXPixels = sidePadding + (xPercent*usableWidth);
|
|
|
- newYPixels = getHeight() - bottomPadding - (usableHeight*yPercent);
|
|
|
- path.lineTo(newXPixels, newYPixels);
|
|
|
- Path pa = new Path();
|
|
|
- pa.moveTo(lastXPixels, lastYPixels);
|
|
|
- pa.lineTo(newXPixels, newYPixels);
|
|
|
- pa.lineTo(newXPixels, 0);
|
|
|
- pa.lineTo(lastXPixels, 0);
|
|
|
- pa.close();
|
|
|
- canvas.drawPath(pa, paint);
|
|
|
- lastXPixels = newXPixels;
|
|
|
- lastYPixels = newYPixels;
|
|
|
- }
|
|
|
- count++;
|
|
|
- }
|
|
|
-
|
|
|
- path.reset();
|
|
|
-
|
|
|
- path.moveTo(0, getHeight()-bottomPadding);
|
|
|
- path.lineTo(sidePadding, getHeight()-bottomPadding);
|
|
|
- path.lineTo(sidePadding, 0);
|
|
|
- path.lineTo(0, 0);
|
|
|
- path.close();
|
|
|
- canvas.drawPath(path, paint);
|
|
|
-
|
|
|
- path.reset();
|
|
|
-
|
|
|
- path.moveTo(getWidth(), getHeight()-bottomPadding);
|
|
|
- path.lineTo(getWidth()-sidePadding, getHeight()-bottomPadding);
|
|
|
- path.lineTo(getWidth()-sidePadding, 0);
|
|
|
- path.lineTo(getWidth(), 0);
|
|
|
- path.close();
|
|
|
-
|
|
|
- canvas.drawPath(path, paint);
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- lineCount++;
|
|
|
- }
|
|
|
-
|
|
|
- paint.reset();
|
|
|
-
|
|
|
- paint.setColor(Color.BLACK);
|
|
|
- paint.setAlpha(50);
|
|
|
- paint.setAntiAlias(true);
|
|
|
- canvas.drawLine(sidePadding, getHeight() - bottomPadding, getWidth()-sidePadding, getHeight()-bottomPadding, paint);
|
|
|
- paint.setAlpha(255);
|
|
|
-
|
|
|
+
|
|
|
+ // DRAW THE BACKGROUND
|
|
|
+ //this.drawBackground(canvas);
|
|
|
+
|
|
|
+ // DRAW THE AXIS
|
|
|
+ this.drawAxis(canvas);
|
|
|
+
|
|
|
+
|
|
|
+ paint.reset();
|
|
|
+
|
|
|
+ // DRAW LINES
|
|
|
for (Line line : lines){
|
|
|
int count = 0;
|
|
|
float lastXPixels = 0, newYPixels = 0;
|
|
@@ -389,8 +374,8 @@ public class LineGraph extends View {
|
|
|
paint.setStrokeWidth(getStrokeWidth(line));
|
|
|
|
|
|
for (LinePoint p : line.getPoints()){
|
|
|
- float yPercent = (p.getY()-minY)/(maxY - minY);
|
|
|
- float xPercent = (p.getX()-minX)/(maxX - minX);
|
|
|
+ float yPercent =(float) ((p.getY()-minY)/(maxY - minY));
|
|
|
+ float xPercent = (float)((p.getX()-minX)/(maxX - minX));
|
|
|
if (count == 0){
|
|
|
lastXPixels = sidePadding + (xPercent*usableWidth);
|
|
|
lastYPixels = getHeight() - bottomPadding - (usableHeight*yPercent);
|
|
@@ -407,7 +392,7 @@ public class LineGraph extends View {
|
|
|
|
|
|
|
|
|
int pointCount = 0;
|
|
|
-
|
|
|
+ // DRAW POINTS
|
|
|
for (Line line : lines){
|
|
|
|
|
|
paint.setColor(line.getColor());
|
|
@@ -416,10 +401,10 @@ public class LineGraph extends View {
|
|
|
|
|
|
if (line.isShowingPoints()){
|
|
|
for (LinePoint p : line.getPoints()){
|
|
|
- float yPercent = (p.getY()-minY)/(maxY - minY);
|
|
|
- float xPercent = (p.getX()-minX)/(maxX - minX);
|
|
|
+ float yPercent =(float) ((p.getY()-minY)/(maxY - minY));
|
|
|
+ float xPercent =(float) ((p.getX()-minX)/(maxX - minX));
|
|
|
float xPixels = sidePadding + (xPercent*usableWidth);
|
|
|
- float yPixels = getHeight() - bottomPadding - (usableHeight*yPercent);
|
|
|
+ float yPixels = getHeight() - bottomPadding - (usableHeight*yPercent);
|
|
|
|
|
|
int outerRadius;
|
|
|
if (line.isUsingDips()) {
|
|
@@ -431,12 +416,12 @@ public class LineGraph extends View {
|
|
|
int innerRadius = outerRadius / 2;
|
|
|
|
|
|
paint.setColor(p.getColor());
|
|
|
- canvas.drawCircle(xPixels, yPixels, outerRadius, paint);
|
|
|
+ canvas.drawCircle(xPixels,(float) yPixels, outerRadius, paint);
|
|
|
paint.setColor(Color.WHITE);
|
|
|
- canvas.drawCircle(xPixels, yPixels, innerRadius, paint);
|
|
|
+ canvas.drawCircle(xPixels,(float) yPixels, innerRadius, paint);
|
|
|
|
|
|
Path path2 = new Path();
|
|
|
- path2.addCircle(xPixels, yPixels, 30, Direction.CW);
|
|
|
+ path2.addCircle(xPixels,(float) yPixels, 30, Direction.CW);
|
|
|
p.setPath(path2);
|
|
|
p.setRegion(new Region((int)(xPixels-30), (int)(yPixels-30), (int)(xPixels+30), (int)(yPixels+30)));
|
|
|
|
|
@@ -460,6 +445,149 @@ public class LineGraph extends View {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ private void drawAxis(Canvas canvas){
|
|
|
+ paint.reset();
|
|
|
+
|
|
|
+ double maxX = getMaxLimX();
|
|
|
+ double minX = getMinLimX();
|
|
|
+
|
|
|
+ float usableWidth = getWidth() - 2*sidePadding;
|
|
|
+ float usableHeight = getHeight() - bottomPadding - topPadding;
|
|
|
+
|
|
|
+ float yPixels = getHeight() - (bottomPadding*3/5);
|
|
|
+
|
|
|
+ // DRAW SEPERATOR
|
|
|
+ paint.setColor(Color.BLACK);
|
|
|
+ paint.setAlpha(50);
|
|
|
+ paint.setAntiAlias(true);
|
|
|
+ // x Axis
|
|
|
+ canvas.drawLine(leftPadding ,yPixels, getWidth()-sidePadding, yPixels, paint);
|
|
|
+ // y Axis
|
|
|
+ canvas.drawLine(leftPadding ,topPadding, leftPadding, yPixels, paint);
|
|
|
+
|
|
|
+ paint.setAlpha(255);
|
|
|
+ this.paint.setTextSize(AXIS_LABEL_FONT_SIZE * mContext.getResources().getDisplayMetrics().scaledDensity);
|
|
|
+
|
|
|
+ // Draw y-axis label text
|
|
|
+ //double skippedValue = (maxY - minY ) / (Math.max(1., yAxisStep));
|
|
|
+ double step = Math.max(1., (maxY - minY) / (Math.max(1., yAxisStep)));
|
|
|
+
|
|
|
+ for (double y = minY; y <= maxY; y+=step){
|
|
|
+ double yPercent = (y-minY)/(maxY - minY);
|
|
|
+
|
|
|
+ double newYPixels = topPadding + (yPercent*usableHeight);
|
|
|
+ canvas.drawLine((float)leftPadding,(float)newYPixels,(float)leftPadding-5.f,(float)newYPixels, paint);
|
|
|
+ String title = this.getY_AxisTitle(maxY - y);
|
|
|
+ float textwidth = (this.paint.measureText(title));
|
|
|
+ canvas.drawText(title, 5.f ,(float)newYPixels + (textwidth/2), this.paint);
|
|
|
+
|
|
|
+ //value+=skippedValue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Draw x-axis label text
|
|
|
+ //value = minX;
|
|
|
+ //skippedValue = (maxX - minX ) / (Math.max(1,xAxisStep));
|
|
|
+ step = Math.max(1, (maxX - minX) / (Math.max(1, xAxisStep)));
|
|
|
+
|
|
|
+ for (double x = minX; x <= maxX; x+=step){
|
|
|
+ double xPercent = (x-minX)/(maxX - minX);
|
|
|
+
|
|
|
+ double newXPixels = sidePadding + (xPercent*usableWidth);
|
|
|
+ canvas.drawLine((float)newXPixels,(float) yPixels + 5,(float) newXPixels,(float) yPixels, paint);
|
|
|
+ String title = this.getX_AxisTitle(x);
|
|
|
+ float textwidth = (this.paint.measureText(title));
|
|
|
+ //this.paint.setTextSize(AXIS_LABEL_FONT_SIZE * mContext.getResources().getDisplayMetrics().scaledDensity);
|
|
|
+ canvas.drawText(title,(float) newXPixels - (textwidth/2),(float) yPixels + (bottomPadding / 2), this.paint);
|
|
|
+
|
|
|
+ //value+=skippedValue;
|
|
|
+ }
|
|
|
+ paint.reset();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void drawBackground(Canvas canvas){
|
|
|
+
|
|
|
+ paint.reset();
|
|
|
+
|
|
|
+
|
|
|
+ float usableHeight = getHeight() - bottomPadding - topPadding;
|
|
|
+ float usableWidth = getWidth() - 2*sidePadding;
|
|
|
+
|
|
|
+ double maxY = getMaxLimY();
|
|
|
+ double minY = getMinLimY();
|
|
|
+ double maxX = getMaxLimX();
|
|
|
+ double minX = getMinLimX();
|
|
|
+
|
|
|
+ Path path = new Path();
|
|
|
+
|
|
|
+ // DRAW THE BACKGROUND
|
|
|
+ int lineCount = 0;
|
|
|
+ for (Line line : lines){
|
|
|
+ int count = 0;
|
|
|
+ float firstXPixels = 0, lastXPixels = 0, newYPixels = 0;
|
|
|
+ float lastYPixels = 0, newXPixels = 0;
|
|
|
+
|
|
|
+ if (lineCount == lineToFill){
|
|
|
+ paint.setColor(Color.BLACK);
|
|
|
+ paint.setAlpha(30);
|
|
|
+ paint.setStrokeWidth(2);
|
|
|
+ for (int i = 10; i-getWidth() < getHeight(); i = i+20){
|
|
|
+ canvas.drawLine(i, getHeight()-bottomPadding, 0, getHeight()-bottomPadding-i, paint);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.CLEAR));
|
|
|
+ for (LinePoint p : line.getPoints()){
|
|
|
+ float yPercent =(float) ((p.getY()-minY)/(maxY - minY));
|
|
|
+ float xPercent =(float) ((p.getX()-minX)/(maxX - minX));
|
|
|
+ if (count == 0){
|
|
|
+ lastXPixels = sidePadding + (xPercent*usableWidth);
|
|
|
+ lastYPixels = getHeight() - bottomPadding - (usableHeight*yPercent);
|
|
|
+ firstXPixels = lastXPixels;
|
|
|
+ path.moveTo(lastXPixels, lastYPixels);
|
|
|
+ } else {
|
|
|
+ newXPixels = sidePadding + (xPercent*usableWidth);
|
|
|
+ newYPixels = getHeight() - bottomPadding - (usableHeight*yPercent);
|
|
|
+ path.lineTo(newXPixels, newYPixels);
|
|
|
+ Path pa = new Path();
|
|
|
+ pa.moveTo(lastXPixels, lastYPixels);
|
|
|
+ pa.lineTo(newXPixels, newYPixels);
|
|
|
+ pa.lineTo(newXPixels, 0);
|
|
|
+ pa.lineTo(lastXPixels, 0);
|
|
|
+ pa.close();
|
|
|
+ canvas.drawPath(pa, paint);
|
|
|
+ lastXPixels = newXPixels;
|
|
|
+ lastYPixels = newYPixels;
|
|
|
+ }
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+
|
|
|
+ path.reset();
|
|
|
+
|
|
|
+ path.moveTo(0, getHeight()-bottomPadding);
|
|
|
+ path.lineTo(sidePadding, getHeight()-bottomPadding);
|
|
|
+ path.lineTo(sidePadding, 0);
|
|
|
+ path.lineTo(0, 0);
|
|
|
+ path.close();
|
|
|
+ canvas.drawPath(path, paint);
|
|
|
+
|
|
|
+ path.reset();
|
|
|
+
|
|
|
+ path.moveTo(getWidth(), getHeight()-bottomPadding);
|
|
|
+ path.lineTo(getWidth()-sidePadding, getHeight()-bottomPadding);
|
|
|
+ path.lineTo(getWidth()-sidePadding, 0);
|
|
|
+ path.lineTo(getWidth(), 0);
|
|
|
+ path.close();
|
|
|
+
|
|
|
+ canvas.drawPath(path, paint);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ lineCount++;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.paint.reset();
|
|
|
+ }
|
|
|
+
|
|
|
private int getStrokeWidth(Line line) {
|
|
|
int strokeWidth;
|
|
|
if (line.isUsingDips()) {
|