package com.handstudio.android.hzgrapherlib.graphview; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.WeakHashMap; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.DashPathEffect; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Rect; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; import com.handstudio.android.hzgrapherlib.canvas.GraphCanvasWrapper; import com.handstudio.android.hzgrapherlib.vo.GraphNameBox; import com.handstudio.android.hzgraphlib.vo.scattergraph.ScatterGraph; import com.handstudio.android.hzgraphlib.vo.scattergraph.ScatterGraphVO; public class ScatterGraphView extends SurfaceView implements Callback { public static final String TAG = ScatterGraphView.class.getSimpleName(); private static final Object touchLock = new Object(); private Context mContext; private DrawThread mDrawThread; private SurfaceHolder mSurfaceHolder; private ScatterGraphVO mScatterGraphVO = null; public ScatterGraphView(Context context, ScatterGraphVO vo) { super(context); mContext = context; mScatterGraphVO = vo; initView(); } private void initView() { mSurfaceHolder = getHolder(); mSurfaceHolder.addCallback(this); } @Override public void surfaceCreated(SurfaceHolder holder) { if(mDrawThread == null){ mDrawThread = new DrawThread(mSurfaceHolder, mContext); } mDrawThread.start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { if(mDrawThread != null){ mDrawThread.isRunning = false; if(mDrawThread.isAlive()){ Thread thread = mDrawThread; thread.interrupt(); mDrawThread = null; } } } class DrawThread extends Thread { SurfaceHolder mHolder; Context mContext; boolean isRunning = true; boolean isDirty = true; Matrix matrix = new Matrix(); int width = getWidth(); int height = getHeight(); int xLength = width - (mScatterGraphVO.getPaddingLeft() + mScatterGraphVO.getPaddingRight() + mScatterGraphVO.getMarginRight()); int yLength = height - (mScatterGraphVO.getPaddingBottom() + mScatterGraphVO.getPaddingTop() + mScatterGraphVO.getMarginTop()); int chartXLength = width - (mScatterGraphVO.getPaddingLeft() + mScatterGraphVO.getPaddingRight()); int chartYLength = height - (mScatterGraphVO.getPaddingBottom() + mScatterGraphVO.getPaddingTop()); Paint pPoint; Paint pBaseLine; Paint pBaseLineD; Paint pMarkText; float anim = 0.0f; boolean isAnimation = false; boolean isDrawRegion = false; long animStartTime = -1; WeakHashMap<Integer, Bitmap> arrIcon = new WeakHashMap<Integer, Bitmap>(); Bitmap bg = null; public DrawThread(SurfaceHolder holder, Context context) { mHolder = holder; mContext = context; int size = mScatterGraphVO.getArrGraph().size(); for(int i=0; i<size; i++){ int bitmapResource = mScatterGraphVO.getArrGraph().get(i).getBitmapResource(); if(bitmapResource != -1){ arrIcon.put(i, BitmapFactory.decodeResource(getResources(), bitmapResource)); } else{ if(arrIcon.get(i) != null){ arrIcon.remove(i); } } } int bgResource = mScatterGraphVO.getGraphBG(); if(bgResource != -1){ Bitmap tempBg = BitmapFactory.decodeResource(getResources(), bgResource); bg = Bitmap.createScaledBitmap(tempBg, width, height, true); tempBg.recycle(); } } @Override public void run() { Canvas canvas = null; GraphCanvasWrapper graphCanvasWrapper = null; setPaint(); isAnimation(); animStartTime = System.currentTimeMillis(); while(isRunning){ if(!isDirty){ try{ sleep(300); } catch(InterruptedException e){ e.printStackTrace(); } continue; } canvas = mHolder.lockCanvas(); graphCanvasWrapper = new GraphCanvasWrapper(canvas, width, height, mScatterGraphVO.getPaddingLeft(), mScatterGraphVO.getPaddingBottom()); synchronized (mHolder) { synchronized (touchLock) { try{ canvas.drawColor(Color.WHITE); if(bg != null){ canvas.drawBitmap(bg, 0, 0, null); } drawBaseLine(graphCanvasWrapper); drawBaseMark(graphCanvasWrapper); drawBaseText(graphCanvasWrapper); drawBaseLineGuide(graphCanvasWrapper); drawGraphName(canvas); if(isAnimation){ drawGraphWithAnimation(graphCanvasWrapper); } else{ drawGraph(graphCanvasWrapper); } } catch(Exception e){ e.printStackTrace(); } finally{ if(graphCanvasWrapper.getCanvas() != null){ mHolder.unlockCanvasAndPost(canvas); } } } } } } private void setPaint() { pPoint = new Paint(); pPoint.setFlags(Paint.ANTI_ALIAS_FLAG); pPoint.setAntiAlias(true); pPoint.setFilterBitmap(true); pPoint.setColor(Color.BLUE); pPoint.setStrokeWidth(2); pPoint.setStyle(Style.FILL_AND_STROKE); pBaseLine = new Paint(); pBaseLine.setFlags(Paint.ANTI_ALIAS_FLAG); pBaseLine.setAntiAlias(true); pBaseLine.setFilterBitmap(true); pBaseLine.setColor(Color.GRAY); pBaseLine.setStrokeWidth(3); pBaseLineD = new Paint(); pBaseLineD.setFlags(Paint.ANTI_ALIAS_FLAG); pBaseLineD.setAntiAlias(true); pBaseLineD.setFilterBitmap(true); pBaseLineD.setColor(0xffcccccc); pBaseLineD.setStrokeWidth(1); pBaseLineD.setStyle(Style.STROKE); pBaseLineD.setPathEffect(new DashPathEffect(new float[] {10,5}, 0)); pMarkText = new Paint(); pMarkText.setFlags(Paint.ANTI_ALIAS_FLAG); pMarkText.setAntiAlias(true); pMarkText.setColor(Color.BLACK); } private void drawBaseLine(GraphCanvasWrapper graphCanvas) { graphCanvas.drawLine(0, 0, chartXLength, 0, pBaseLine); graphCanvas.drawLine(0, 0, 0, chartYLength, pBaseLine); } private void drawBaseMark(GraphCanvasWrapper graphCanvas) { for (int i = 1; mScatterGraphVO.getIncrementX() * i <= mScatterGraphVO.getMaxValueX(); i++) { float y = yLength * mScatterGraphVO.getIncrementX() * i/mScatterGraphVO.getMaxValueX(); graphCanvas.drawLine(0, y, -10, y, pBaseLine); } for (int i = 1; mScatterGraphVO.getIncrementY() * i <= mScatterGraphVO.getMaxValueY(); i++) { float x = xLength * mScatterGraphVO.getIncrementY() * i / mScatterGraphVO.getMaxValueY(); graphCanvas.drawLine(x, 0, x, -10, pBaseLine); } } private void drawBaseText(GraphCanvasWrapper graphCanvas) { for (int i = 0; mScatterGraphVO.getIncrementY() * i <= mScatterGraphVO.getMaxValueY(); i++) { float x = xLength * mScatterGraphVO.getIncrementY() * i/mScatterGraphVO.getMaxValueY(); String mark = Float.toString(mScatterGraphVO.getIncrementY() * i); pMarkText.measureText(mark); pMarkText.setTextSize(20); Rect rect = new Rect(); pMarkText.getTextBounds(mark, 0, mark.length(), rect); graphCanvas.drawText(mark, x -(rect.width()/2), -(20 + rect.height()), pMarkText); } for (int i = 0; mScatterGraphVO.getIncrementX() * i <= mScatterGraphVO.getMaxValueX(); i++) { String mark = Float.toString(mScatterGraphVO.getIncrementX() * i); float y = yLength * mScatterGraphVO.getIncrementX() * i/mScatterGraphVO.getMaxValueX(); pMarkText.measureText(mark); pMarkText.setTextSize(20); Rect rect = new Rect(); pMarkText.getTextBounds(mark, 0, mark.length(), rect); graphCanvas.drawText(mark, -(rect.width() + 20), y-rect.height()/2, pMarkText); } } private void drawBaseLineGuide(GraphCanvasWrapper graphCanvas) { for (int i = 1; mScatterGraphVO.getIncrementX() * i <= mScatterGraphVO.getMaxValueX(); i++) { float y = yLength * mScatterGraphVO.getIncrementX() * i/mScatterGraphVO.getMaxValueX(); graphCanvas.drawLine(0, y, chartXLength, y, pBaseLineD); } for (int i = 1; mScatterGraphVO.getIncrementY() * i <= mScatterGraphVO.getMaxValueY(); i++) { float x = xLength * mScatterGraphVO.getIncrementY() * i / mScatterGraphVO.getMaxValueY(); graphCanvas.drawLine(x, 0, x, chartYLength, pBaseLineD); } } private void drawGraphWithAnimation(GraphCanvasWrapper graphCanvas) { getRandomIndex(); // Log.i(TAG, "indexList.size() = " + indexList.size()); for(int i=0; i<indexList.size(); i++){ ScatterGraph graph = mScatterGraphVO.getArrGraph().get(indexList.get(i)); float[] graphCoor = graph.getCoordinateArr(); float x = (graphCoor[0] * xLength) / mScatterGraphVO.getMaxValueY(); float y = (graphCoor[1] * yLength) / mScatterGraphVO.getMaxValueX(); int color = graph.getColor(); pPoint.setColor(color); graphCanvas.drawCircle(x, y, 5, pPoint); } if(indexList.size() == 100 && mScatterGraphVO.getArrGraph().size() == 100){ isAnimation = false; } } private void drawGraph(GraphCanvasWrapper graphCanvas) { // Log.i(TAG, "mScatterGraphVO.getArrGraph().size() = " + mScatterGraphVO.getArrGraph().size()); for(int i=0; i<mScatterGraphVO.getArrGraph().size(); i++) { ScatterGraph graph = mScatterGraphVO.getArrGraph().get(i); float[] graphCoor = graph.getCoordinateArr(); float x = (graphCoor[0] * xLength) / mScatterGraphVO.getMaxValueY(); float y = (graphCoor[1] * yLength) / mScatterGraphVO.getMaxValueX(); int color = graph.getColor(); pPoint.setColor(color); graphCanvas.drawCircle(x, y, 5, pPoint); } } private void drawGraphName(Canvas canvas) { GraphNameBox gnb = mScatterGraphVO.getGraphNameBox(); if(gnb != null){ int nameboxWidth = 0; int nameboxHeight = 0; int nameboxIconWidth = gnb.getNameboxIconWidth(); int nameboxIconHeight = gnb.getNameboxIconHeight(); int nameboxMarginTop = gnb.getNameboxMarginTop(); int nameboxMarginRight = gnb.getNameboxMarginRight(); int nameboxPadding = gnb.getNameboxPadding(); int nameboxTextIconMargin = gnb.getNameboxIconMargin(); int nameboxIconMargin = gnb.getNameboxIconMargin(); int nameboxTextSize = gnb.getNameboxTextSize(); int maxTextWidth = 0; int maxTextHeight = 0; Paint nameRextPaint = new Paint(); nameRextPaint.setFlags(Paint.ANTI_ALIAS_FLAG); nameRextPaint.setAntiAlias(true); //text anti alias nameRextPaint.setFilterBitmap(true); // bitmap anti alias nameRextPaint.setColor(Color.BLUE); nameRextPaint.setStrokeWidth(3); nameRextPaint.setStyle(Style.STROKE); Paint pIcon = new Paint(); pIcon.setFlags(Paint.ANTI_ALIAS_FLAG); pIcon.setAntiAlias(true); //text anti alias pIcon.setFilterBitmap(true); // bitmap anti alias pIcon.setColor(Color.BLUE); pIcon.setStrokeWidth(3); pIcon.setStyle(Style.FILL_AND_STROKE); Paint pNameText = new Paint(); pNameText.setFlags(Paint.ANTI_ALIAS_FLAG); pNameText.setAntiAlias(true); //text anti alias pNameText.setTextSize(nameboxTextSize); pNameText.setColor(Color.BLACK); int graphSize = mScatterGraphVO.getLegendArr().length; for (int i = 0; i < graphSize; i++) { String text = mScatterGraphVO.getLegendArr()[i]; Rect rect = new Rect(); pNameText.getTextBounds(text, 0, text.length(), rect); if(rect.width() > maxTextWidth){ maxTextWidth = rect.width(); maxTextHeight = rect.height(); } mScatterGraphVO.getArrGraph().get(i).getName(); } nameboxWidth = 1 * maxTextWidth + nameboxTextIconMargin + nameboxIconWidth; int maxCellHight = maxTextHeight; if(nameboxIconHeight > maxTextHeight){ maxCellHight = nameboxIconHeight; } nameboxHeight = graphSize * maxCellHight + (graphSize-1) * nameboxIconMargin; canvas.drawRect(width - (nameboxMarginRight + nameboxWidth) - nameboxPadding*2, nameboxMarginTop, width - nameboxMarginRight, nameboxMarginTop + nameboxHeight + nameboxPadding*2, nameRextPaint); for (int i = 0; i < graphSize; i++) { for(int j=0; j<mScatterGraphVO.getArrGraph().size(); j++){ ScatterGraph graph = mScatterGraphVO.getArrGraph().get(j); String name = graph.getName(); if(!name.equals(mScatterGraphVO.getLegendArr()[i])){ pIcon.setColor(graph.getColor()); canvas.drawRect(width - (nameboxMarginRight + nameboxWidth) - nameboxPadding, nameboxMarginTop + (maxCellHight * i) + nameboxPadding + (nameboxIconMargin * i), width - (nameboxMarginRight + maxTextWidth) - nameboxPadding - nameboxTextIconMargin, nameboxMarginTop + maxCellHight * (i+1) + nameboxPadding + nameboxIconMargin * i, pIcon); String text = graph.getName(); canvas.drawText(text, width - (nameboxMarginRight + maxTextWidth) - nameboxPadding, nameboxMarginTop + maxTextHeight/2 + maxCellHight * i + maxCellHight/2 + nameboxPadding + nameboxIconMargin * i, pNameText); } } } } } ArrayList<Integer> indexList = new ArrayList<Integer>(); private int getRandomIndex() { int index = -1; int size = mScatterGraphVO.getArrGraph().size(); Random random = new Random(); int rNum = random.nextInt(size); if(!isDuplicate(rNum)){ indexList.add(rNum); index = rNum; Log.e(TAG, "rNum = " + rNum); return index; } return getRandomIndex(); } private boolean isDuplicate(int rNum) { boolean result = false; if(indexList.size() == 0){ return false; } for(int i=0; i<indexList.size(); i++){ int pNum = indexList.get(i); if(pNum == rNum){ result = true; } else{ result = false; } } return result; } private void isAnimation() { if(mScatterGraphVO.getAnimation() != null){ isAnimation = true; }else{ isAnimation = false; } } // private void calcTimePass(){ // if(isAnimation){ // long curTime = System.currentTimeMillis(); // long gapTime = curTime - animStartTime; // long animDuration = mScatterGraphVO.getAnimation().getDuration(); // if(gapTime >= animDuration){ // gapTime = animDuration; // isDirty = false; // } // // anim = mScatterGraphVO.getArrGraph().get(0).getCoordinateArr().size() * (float)gapTime/(float)animDuration; // }else{ // isDirty = false; // } // // // Log.e(TAG,"curTime = " + curTime + " , animStartTime = " + animStartTime); // // Log.e(TAG,"anim = " + anim + " , gapTime = " + gapTime); // } // // // private void drawGraphName(Canvas canvas) { // GraphNameBox gnb = mScatterGraphVO.getGraphNameBox(); // if(gnb != null){ // int nameboxWidth = 0; // int nameboxHeight = 0; // // int nameboxIconWidth = gnb.getNameboxIconWidth(); // int nameboxIconHeight = gnb.getNameboxIconHeight(); // // int nameboxMarginTop = gnb.getNameboxMarginTop(); // int nameboxMarginRight = gnb.getNameboxMarginRight(); // int nameboxPadding = gnb.getNameboxPadding(); // // int nameboxTextIconMargin = gnb.getNameboxIconMargin(); // int nameboxIconMargin = gnb.getNameboxIconMargin(); // int nameboxTextSize = gnb.getNameboxTextSize(); // // int maxTextWidth = 0; // int maxTextHeight = 0; // // Paint nameRextPaint = new Paint(); // nameRextPaint.setFlags(Paint.ANTI_ALIAS_FLAG); // nameRextPaint.setAntiAlias(true); //text anti alias // nameRextPaint.setFilterBitmap(true); // bitmap anti alias // nameRextPaint.setColor(Color.BLUE); // nameRextPaint.setStrokeWidth(3); // nameRextPaint.setStyle(Style.STROKE); // // Paint pIcon = new Paint(); // pIcon.setFlags(Paint.ANTI_ALIAS_FLAG); // pIcon.setAntiAlias(true); //text anti alias // pIcon.setFilterBitmap(true); // bitmap anti alias // pIcon.setColor(Color.BLUE); // pIcon.setStrokeWidth(3); // pIcon.setStyle(Style.FILL_AND_STROKE); // // // Paint pNameText = new Paint(); // pNameText.setFlags(Paint.ANTI_ALIAS_FLAG); // pNameText.setAntiAlias(true); //text anti alias // pNameText.setTextSize(nameboxTextSize); // pNameText.setColor(Color.BLACK); // // // int graphSize = mScatterGraphVO.getArrGraph().size(); // for (int i = 0; i < graphSize; i++) { // // // String text = mScatterGraphVO.getArrGraph().get(i).getName(); // Rect rect = new Rect(); // pNameText.getTextBounds(text, 0, text.length(), rect); // // if(rect.width() > maxTextWidth){ // maxTextWidth = rect.width(); // maxTextHeight = rect.height(); // } // // mScatterGraphVO.getArrGraph().get(i).getName(); // // } // mScatterGraphVO.getArrGraph().get(0).getName(); // nameboxWidth = 1 * maxTextWidth + nameboxTextIconMargin + nameboxIconWidth; // int maxCellHight = maxTextHeight; // if(nameboxIconHeight > maxTextHeight){ // maxCellHight = nameboxIconHeight; // } // nameboxHeight = graphSize * maxCellHight + (graphSize-1) * nameboxIconMargin; // // canvas.drawRect(width - (nameboxMarginRight + nameboxWidth) - nameboxPadding*2, // nameboxMarginTop, width - nameboxMarginRight, nameboxMarginTop + nameboxHeight + nameboxPadding*2, nameRextPaint); // // for (int i = 0; i < graphSize; i++) { // // pIcon.setColor(mScatterGraphVO.getArrGraph().get(i).getColor()); // canvas.drawRect(width - (nameboxMarginRight + nameboxWidth) - nameboxPadding, // nameboxMarginTop + (maxCellHight * i) + nameboxPadding + (nameboxIconMargin * i), // width - (nameboxMarginRight + maxTextWidth) - nameboxPadding - nameboxTextIconMargin, // nameboxMarginTop + maxCellHight * (i+1) + nameboxPadding + nameboxIconMargin * i, pIcon); // // String text = mScatterGraphVO.getArrGraph().get(i).getName(); // canvas.drawText(text, width - (nameboxMarginRight + maxTextWidth) - nameboxPadding, // nameboxMarginTop + maxTextHeight/2 + maxCellHight * i + maxCellHight/2 + nameboxPadding + nameboxIconMargin * i, pNameText); // } // } // } // // // // private void drawBaseLine(GraphCanvasWrapper graphCanvas) { // for (int i = 1; mScatterGraphVO.getIncrement() * i <= mScatterGraphVO.getMaxValueX(); i++) { // // float y = yLength * mScatterGraphVO.getIncrement() * i/mScatterGraphVO.getMaxValueX(); // // graphCanvas.drawLine(0, y, chartXLength, y, pBaseLineX); // } // } // // // private void drawXMark(GraphCanvasWrapper graphCanvas) { // float x = 0; // float y = 0; // // // float xGap = xLength/(mScatterGraphVO.getArrGraph().get(0).getCoordinateArr().length-1); // float xGap = xLength/(mScatterGraphVO.getLegendArr().length); // for (int i = 0; i < mScatterGraphVO.getLegendArr().length; i++) { // x = xGap * i; // y = yLength * mScatterGraphVO.getArrGraph().get(0).getCoordinateArr()[i]/mScatterGraphVO.getMaxValue(); // // graphCanvas.drawLine(x, 0, x, -10, pBaseLine); // } // } // // private void drawYMark(GraphCanvasWrapper canvas) { // for (int i = 0; mScatterGraphVO.getIncrement() * i <= mScatterGraphVO.getMaxValue(); i++) { // // float y = yLength * mScatterGraphVO.getIncrement() * i/mScatterGraphVO.getMaxValue(); // // canvas.drawLine(0, y, -10, y, pBaseLine); // } // } // // // private void drawXText(GraphCanvasWrapper graphCanvas) { // float x = 0; // float y = 0; // // float xGap = xLength/(mScatterGraphVO.getArrGraph().get(0).getCoordinateArr().length-1); // for (int i = 0; i < mScatterGraphVO.getLegendArr().length; i++) { // x = xGap * i; // // String text = mScatterGraphVO.getLegendArr()[i]; // pMarkText.measureText(text); // pMarkText.setTextSize(20); // Rect rect = new Rect(); // pMarkText.getTextBounds(text, 0, text.length(), rect); // // graphCanvas.drawText(text, x -(rect.width()/2), -(20 + rect.height()), pMarkText); // } // } // // /** // * draw Y Text // */ // private void drawYText(GraphCanvasWrapper graphCanvas) { // for (int i = 0; mScatterGraphVO.getIncrement() * i <= mScatterGraphVO.getMaxValue(); i++) { // // String mark = Float.toString(mScatterGraphVO.getIncrement() * i); // float y = yLength * mScatterGraphVO.getIncrement() * i/mScatterGraphVO.getMaxValue(); // pMarkText.measureText(mark); // pMarkText.setTextSize(20); // Rect rect = new Rect(); // pMarkText.getTextBounds(mark, 0, mark.length(), rect); // // Log.e(TAG, "rect = height()" + rect.height()); // // Log.e(TAG, "rect = width()" + rect.width()); // graphCanvas.drawText(mark, -(rect.width() + 20), y-rect.height()/2, pMarkText); // } // } // // // // private void drawGraphRegion(GraphCanvasWrapper graphCanvas) { // if(isDrawRegion){ // if (isAnimation){ // drawGraphRegionWithAnimation(graphCanvas); // }else{ // drawGraphRegionWithoutAnimation(graphCanvas); // } // } // } // // private void drawGraph(GraphCanvasWrapper graphCanvas) { // // if (isAnimation){ // drawGraphWithAnimation(graphCanvas); // }else{ // drawGraphWithoutAnimation(graphCanvas); // } // } // // // // private void drawGraphRegionWithoutAnimation(GraphCanvasWrapper graphCanvas) // { // boolean isDrawRegion = mScatterGraphVO.isDrawRegion(); // // for (int i = 0; i < mScatterGraphVO.getArrGraph().size(); i++) { // GraphPath regionPath = new GraphPath(width, height, mScatterGraphVO.getPaddingLeft(), mScatterGraphVO.getPaddingBottom()); // boolean firstSet = false; // float x = 0; // float y = 0; // pPoint.setColor(mScatterGraphVO.getArrGraph().get(i).getColor()); // float xGap = xLength/(mScatterGraphVO.getArrGraph().get(i).getCoordinateArr().length-1); // // for (int j = 0; j < mScatterGraphVO.getArrGraph().get(i).getCoordinateArr().length; j++) { // if(j < mScatterGraphVO.getArrGraph().get(i).getCoordinateArr().length){ // // if (!firstSet) { // // x = xGap * j ; // y = yLength * mScatterGraphVO.getArrGraph().get(i).getCoordinateArr()[j]/mScatterGraphVO.getMaxValue(); // // regionPath.moveTo(x, 0); // regionPath.lineTo(x, y); // // firstSet = true; // } else { // x = xGap * j; // y = yLength * mScatterGraphVO.getArrGraph().get(i).getCoordinateArr()[j]/mScatterGraphVO.getMaxValue(); // // regionPath.lineTo(x, y); // } // } // } // // if(isDrawRegion){ // regionPath.lineTo(x, 0); // regionPath.lineTo(0, 0); // // Paint pBg = new Paint(); // pBg.setFlags(Paint.ANTI_ALIAS_FLAG); // pBg.setAntiAlias(true); //text anti alias // pBg.setFilterBitmap(true); // bitmap anti alias // pBg.setStyle(Style.FILL); // pBg.setColor(mScatterGraphVO.getArrGraph().get(i).getColor()); // graphCanvas.getCanvas().drawPath(regionPath, pBg); // } // } // } // // // private void drawGraphWithoutAnimation(GraphCanvasWrapper graphCanvas) // { // for (int i = 0; i < mScatterGraphVO.getArrGraph().size(); i++) { // GraphPath linePath = new GraphPath(width, height, mScatterGraphVO.getPaddingLeft(), mScatterGraphVO.getPaddingBottom()); // GraphPath regionPath = new GraphPath(width, height, mScatterGraphVO.getPaddingLeft(), mScatterGraphVO.getPaddingBottom()); // boolean firstSet = false; // float x = 0; // float y = 0; // pPoint.setColor(mScatterGraphVO.getArrGraph().get(i).getColor()); // float xGap = xLength/(mScatterGraphVO.getArrGraph().get(i).getCoordinateArr().length-1); // // Bitmap icon = arrIcon.get(i); // // for (int j = 0; j < mScatterGraphVO.getArrGraph().get(i).getCoordinateArr().length; j++) { // if(j < mScatterGraphVO.getArrGraph().get(i).getCoordinateArr().length){ // // if (!firstSet) { // // x = xGap * j ; // y = yLength * mScatterGraphVO.getArrGraph().get(i).getCoordinateArr()[j]/mScatterGraphVO.getMaxValue(); // // linePath.moveTo(x, y); // // firstSet = true; // } else { // x = xGap * j; // y = yLength * mScatterGraphVO.getArrGraph().get(i).getCoordinateArr()[j]/mScatterGraphVO.getMaxValue(); // // linePath.lineTo(x, y); // } // // if(icon == null){ // graphCanvas.drawCircle(x, y, 4, pPoint); // }else{ // graphCanvas.drawBitmapIcon(icon, x, y, null); // } // } // } // } // } // // // private void drawGraphWithAnimation(GraphCanvasWrapper graphCanvas) { // //for draw animation // float prev_x = 0; // float prev_y = 0; // // float next_x = 0; // float next_y = 0; // // float value = 0; // float mode = 0; // // for (int i = 0; i < mScatterGraphVO.getArrGraph().size(); i++) { // GraphPath linePath = new GraphPath(width, height, mScatterGraphVO.getPaddingLeft(), mScatterGraphVO.getPaddingBottom()); // GraphPath regionPath = new GraphPath(width, height, mScatterGraphVO.getPaddingLeft(), mScatterGraphVO.getPaddingBottom()); // boolean firstSet = false; // float x = 0; // float y = 0; // // pPoint.setColor(mScatterGraphVO.getArrGraph().get(i).getColor()); // float xGap = xLength/(mScatterGraphVO.getArrGraph().get(i).getCoordinateArr().length-1); // // Bitmap icon = arrIcon.get(i); // value = anim/1; // mode = anim %1; // // for (int j = 0; j < value+1; j++) { // if(j < mScatterGraphVO.getArrGraph().get(i).getCoordinateArr().length){ // // if (!firstSet) { // // x = xGap * j ; // y = yLength * mScatterGraphVO.getArrGraph().get(i).getCoordinateArr()[j]/mScatterGraphVO.getMaxValue(); // // linePath.moveTo(x, y); // // firstSet = true; // } else { // x = xGap * j; // y = yLength * mScatterGraphVO.getArrGraph().get(i).getCoordinateArr()[j]/mScatterGraphVO.getMaxValue(); // // if( j > value && mode != 0){ // next_x = x - prev_x; // next_y = y - prev_y; // // linePath.lineTo(prev_x + next_x * mode, prev_y + next_y * mode); // }else{ // linePath.lineTo(x, y); // } // } // // if(icon == null){ // graphCanvas.drawCircle(x, y, 4, pPoint); // }else{ // graphCanvas.drawBitmapIcon(icon, x, y, null); // } // prev_x = x; // prev_y = y; // } // } // } // } // // // private void drawGraphRegionWithAnimation(GraphCanvasWrapper graphCanvas) { // //for draw animation // float prev_x = 0; // float prev_y = 0; // // float next_x = 0; // float next_y = 0; // // int value = 0; // float mode = 0; // // boolean isDrawRegion = mScatterGraphVO.isDrawRegion(); // // for (int i = 0; i < mScatterGraphVO.getArrGraph().size(); i++) { // GraphPath regionPath = new GraphPath(width, height, mScatterGraphVO.getPaddingLeft(), mScatterGraphVO.getPaddingBottom()); // boolean firstSet = false; // float x = 0; // float y = 0; // pPoint.setColor(mScatterGraphVO.getArrGraph().get(i).getColor()); // float xGap = xLength/(mScatterGraphVO.getArrGraph().get(i).getCoordinateArr().length-1); // // value = (int) (anim/1); // mode = anim %1; // // boolean isFinish = false; // for (int j = 0; j <= value+1; j++) { // if(j < mScatterGraphVO.getArrGraph().get(i).getCoordinateArr().length){ // // if (!firstSet) { // // x = xGap * j ; // y = yLength * mScatterGraphVO.getArrGraph().get(i).getCoordinateArr()[j]/mScatterGraphVO.getMaxValue(); // // regionPath.moveTo(x, 0); // regionPath.lineTo(x, y); // // firstSet = true; // } else { // x = xGap * j; // y = yLength * mScatterGraphVO.getArrGraph().get(i).getCoordinateArr()[j]/mScatterGraphVO.getMaxValue(); // // if( j > value){ // next_x = x - prev_x; // next_y = y - prev_y; // regionPath.lineTo(prev_x + next_x * mode, prev_y + next_y * mode); // }else{ // regionPath.lineTo(x, y); // } // } // // prev_x = x; // prev_y = y; // } // } // isFinish = true; // // if(isDrawRegion){ // float x_bg = prev_x + next_x * mode; // if(x_bg >= xLength){ // x_bg = xLength; // } // regionPath.lineTo(x_bg, 0); // regionPath.lineTo(0, 0); // // Paint pBg = new Paint(); // pBg.setFlags(Paint.ANTI_ALIAS_FLAG); // pBg.setAntiAlias(true); //text anti alias // pBg.setFilterBitmap(true); // bitmap anti alias // pBg.setStyle(Style.FILL); // pBg.setColor(mScatterGraphVO.getArrGraph().get(i).getColor()); // graphCanvas.getCanvas().drawPath(regionPath, pBg); // } // } // } // // // private void setPaint() // { // pPoint = new Paint(); // pPoint.setFlags(Paint.ANTI_ALIAS_FLAG); // pPoint.setAntiAlias(true); // pPoint.setFilterBitmap(true); // pPoint.setColor(Color.BLUE); // pPoint.setStrokeWidth(2); // pPoint.setStyle(Style.FILL_AND_STROKE); // // pBaseLine = new Paint(); // pBaseLine.setFlags(Paint.ANTI_ALIAS_FLAG); // pBaseLine.setAntiAlias(true); // pBaseLine.setFilterBitmap(true); // pBaseLine.setColor(Color.GRAY); // pBaseLine.setStrokeWidth(3); // // pBaseLineX = new Paint(); // pBaseLineX.setFlags(Paint.ANTI_ALIAS_FLAG); // pBaseLineX.setAntiAlias(true); // pBaseLineX.setFilterBitmap(true); // pBaseLineX.setColor(0xffcccccc); // pBaseLineX.setStrokeWidth(1); // pBaseLineX.setStyle(Style.STROKE); // pBaseLineX.setPathEffect(new DashPathEffect(new float[] {10,5}, 0)); // // pBaseLineY = new Paint(); // pBaseLineY.setFlags(Paint.ANTI_ALIAS_FLAG); // pBaseLineY.setAntiAlias(true); // pBaseLineY.setFilterBitmap(true); // pBaseLineY.setColor(0xffcccccc); // pBaseLineY.setStrokeWidth(1); // pBaseLineY.setStyle(Style.STROKE); // pBaseLineY.setPathEffect(new DashPathEffect(new float[] {10,5}, 0)); // // pMarkText = new Paint(); // pMarkText.setFlags(Paint.ANTI_ALIAS_FLAG); // pMarkText.setAntiAlias(true); // pMarkText.setColor(Color.BLACK); // // } // // // private void isAnimation() // { // if(mScatterGraphVO.getAnimation() != null){ // isAnimation = true; // }else{ // isAnimation = false; // } // } // // // private void isDrawRegion() { // if(mScatterGraphVO.isDrawRegion()){ // isDrawRegion = true; // }else{ // isDrawRegion = false; // } // } // // // } } }