Android Open Source - HzGrapher Scatter Graph View






From Project

Back to project page HzGrapher.

License

The source code is released under:

Apache License

If you think the Android project HzGrapher listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.handstudio.android.hzgrapherlib.graphview;
//from ww w.j  a v a 2s .c om
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;
//      }
//    }
//    
//    
//  }
    
    
    
  }
}




Java Source Code List

com.handstudio.android.hzgrapher.BarGraphActivity.java
com.handstudio.android.hzgrapher.BubbleGraphActivity.java
com.handstudio.android.hzgrapher.BubbleGraphActivity.java
com.handstudio.android.hzgrapher.CircleGraphActivity.java
com.handstudio.android.hzgrapher.CircleGraphActivity.java
com.handstudio.android.hzgrapher.CurveCompareGraphActivity.java
com.handstudio.android.hzgrapher.CurveCompareGraphActivity.java
com.handstudio.android.hzgrapher.CurveGraphActivity.java
com.handstudio.android.hzgrapher.CurveGraphActivity.java
com.handstudio.android.hzgrapher.CurveGraphWithRegionActivity.java
com.handstudio.android.hzgrapher.CurveGraphWithRegionActivity.java
com.handstudio.android.hzgrapher.LineCompareGraphActivity.java
com.handstudio.android.hzgrapher.LineCompareGraphActivity.java
com.handstudio.android.hzgrapher.LineGraphActivity.java
com.handstudio.android.hzgrapher.LineGraphActivity.java
com.handstudio.android.hzgrapher.LineGraphWithRegionActivity.java
com.handstudio.android.hzgrapher.LineGraphWithRegionActivity.java
com.handstudio.android.hzgrapher.MainActivity.java
com.handstudio.android.hzgrapher.MainActivity.java
com.handstudio.android.hzgrapher.PieGraphActivity.java
com.handstudio.android.hzgrapher.PieGraphActivity.java
com.handstudio.android.hzgrapher.RadarGraphActivity.java
com.handstudio.android.hzgrapher.RadarGraphActivity.java
com.handstudio.android.hzgrapher.ScatterGraphActivity.java
com.handstudio.android.hzgrapher.ScatterGraphActivity.java
com.handstudio.android.hzgrapherlib.animation.GraphAnimation.java
com.handstudio.android.hzgrapherlib.canvas.GraphCanvasWrapper.java
com.handstudio.android.hzgrapherlib.error.ErrorCode.java
com.handstudio.android.hzgrapherlib.error.ErrorDetector.java
com.handstudio.android.hzgrapherlib.graphview.BarGraphView.java
com.handstudio.android.hzgrapherlib.graphview.BubbleGraphView.java
com.handstudio.android.hzgrapherlib.graphview.CircleGraphView.java
com.handstudio.android.hzgrapherlib.graphview.CurveCompareGraphView.java
com.handstudio.android.hzgrapherlib.graphview.CurveGraphView.java
com.handstudio.android.hzgrapherlib.graphview.LineCompareGraphView.java
com.handstudio.android.hzgrapherlib.graphview.LineGraphView.java
com.handstudio.android.hzgrapherlib.graphview.RadarGraphView.java
com.handstudio.android.hzgrapherlib.graphview.ScatterGraphView.java
com.handstudio.android.hzgrapherlib.path.GraphPath.java
com.handstudio.android.hzgrapherlib.util.Converter.java
com.handstudio.android.hzgrapherlib.util.EuclidLine.java
com.handstudio.android.hzgrapherlib.util.EuclidPoint.java
com.handstudio.android.hzgrapherlib.util.IntersectFinder.java
com.handstudio.android.hzgrapherlib.util.MatrixTranslator.java
com.handstudio.android.hzgrapherlib.util.Spline.java
com.handstudio.android.hzgrapherlib.vo.GraphNameBox.java
com.handstudio.android.hzgrapherlib.vo.Graph.java
com.handstudio.android.hzgrapherlib.vo.bargraph.BarGraphVO.java
com.handstudio.android.hzgrapherlib.vo.bargraph.BarGraph.java
com.handstudio.android.hzgrapherlib.vo.bubblegraph.BubbleGraphVO.java
com.handstudio.android.hzgrapherlib.vo.bubblegraph.BubbleGraph.java
com.handstudio.android.hzgrapherlib.vo.circlegraph.CircleGraphVO.java
com.handstudio.android.hzgrapherlib.vo.circlegraph.CircleGraph.java
com.handstudio.android.hzgrapherlib.vo.curvegraph.CurveGraphVO.java
com.handstudio.android.hzgrapherlib.vo.curvegraph.CurveGraph.java
com.handstudio.android.hzgrapherlib.vo.linegraph.LineGraphVO.java
com.handstudio.android.hzgrapherlib.vo.linegraph.LineGraph.java
com.handstudio.android.hzgrapherlib.vo.radargraph.RadarGraphVO.java
com.handstudio.android.hzgrapherlib.vo.radargraph.RadarGraph.java
com.handstudio.android.hzgraphlib.vo.scattergraph.ScatterGraphVO.java
com.handstudio.android.hzgraphlib.vo.scattergraph.ScatterGraph.java