Advertisement
Guest User

Untitled

a guest
Jan 20th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.72 KB | None | 0 0
  1.  
  2. public class CustomScale extends View {
  3.     static int screenSize = 480;
  4.     static private float pxmm = screenSize / 67.f;
  5.     int width, height, midScreenPoint;
  6.     float startingPoint = 0;
  7.     float downpoint = 0, movablePoint = 0, downPointClone = 0;
  8.     private float mainPoint = 0, mainPointClone = 0;
  9.     boolean isDown = false;
  10.     boolean isUpward = false;
  11.     private boolean isMove;
  12.     private onViewUpdateListener mListener;
  13.     private Paint rulerPaint, pinkPaint;
  14.     private int endPoint;
  15.     boolean isSizeChanged = false;
  16.     float userStartingPoint = 0f;
  17.     private int scaleLineMedium;
  18.     private int scaleLineLarge;
  19.     boolean isFirstTime = true;
  20.  
  21.     public CustomScale(Context context, AttributeSet foo) {
  22.         super(context, foo);
  23.         if (!isInEditMode()) {
  24.             init(context);
  25.         }
  26.     }
  27.  
  28.     public interface onViewUpdateListener{
  29.         void onViewUpdate(float result);
  30.     }
  31.  
  32.     private void init(Context context) {
  33.         rulerPaint = new Paint();
  34.         rulerPaint.setStyle(Paint.Style.STROKE);
  35.         rulerPaint.setStrokeWidth(2);
  36.         rulerPaint.setAntiAlias(false);
  37.         rulerPaint.setColor(Color.BLACK);
  38.         pinkPaint = new Paint();
  39.         pinkPaint.setStyle(Paint.Style.STROKE);
  40.         pinkPaint.setStrokeWidth(4);
  41.         pinkPaint.setAntiAlias(false);
  42.         pinkPaint.setColor(ContextCompat.getColor(context , R.color.button_pink));
  43.         scaleLineMedium = (int) getResources().getDimension(R.dimen.scale_line_medium);
  44.         scaleLineLarge = (int) getResources().getDimension(R.dimen.scale_line_large);
  45.     }
  46.  
  47.     public void setUpdateListener(onViewUpdateListener onViewUpdateListener) {
  48.         mListener = onViewUpdateListener;
  49.     }
  50.  
  51.     @Override
  52.     public void onSizeChanged(int w, int h, int oldW, int oldH) {
  53.         width = w;
  54.         height = h;
  55.         screenSize = height;
  56.         pxmm = screenSize / 22.f;
  57.         midScreenPoint = height / 2;
  58.         endPoint = width - 40;
  59.         if (isSizeChanged) {
  60.             isSizeChanged = false;
  61.             mainPoint = midScreenPoint - (userStartingPoint * 10 * pxmm);
  62.         }
  63.     }
  64.  
  65.     @Override
  66.     public void onDraw(Canvas canvas) {
  67.  
  68.         startingPoint = mainPoint;
  69.         for (int i = 5;; ++i) {
  70.             if (startingPoint > screenSize) {
  71.                 break;
  72.             }
  73.             startingPoint = startingPoint + pxmm;
  74.             int size = (i % 5 == 0) ? endPoint - scaleLineLarge : endPoint - scaleLineMedium ;
  75.             canvas.drawLine(0, startingPoint, endPoint - size, startingPoint, rulerPaint);
  76.         }
  77.         canvas.drawLine(0, midScreenPoint, endPoint , midScreenPoint, pinkPaint);
  78.     }
  79.  
  80.     @Override
  81.     public boolean onTouchEvent(MotionEvent event) {
  82.         System.out.println("touch event fire");
  83.         mainPointClone = mainPoint;
  84.         if (mainPoint < 0) {
  85.             mainPointClone = -mainPoint;
  86.         }
  87.         float clickPoint = ((midScreenPoint + mainPointClone) / (pxmm * 10));
  88.         if (mListener != null) {
  89.             mListener.onViewUpdate((midScreenPoint + mainPointClone) / (pxmm * 10));
  90.         }
  91.         System.out.println("click point" + clickPoint + "");
  92.         switch (event.getAction()) {
  93.             case MotionEvent.ACTION_DOWN:
  94.                 isMove = true;
  95.                 isDown = false;
  96.                 isUpward = false;
  97.                 downpoint = event.getY();
  98.                 downPointClone = event.getY();
  99.                 break;
  100.             case MotionEvent.ACTION_MOVE:
  101.                 movablePoint = event.getY();
  102.                 if (downPointClone > movablePoint) {
  103. /**
  104.  * if user first starts moving downward and then upwards then
  105.  * this method makes it to move upward
  106.  */
  107.                     if (isUpward) {
  108.                         downpoint = event.getY();
  109.                         downPointClone = downpoint;
  110.                     }
  111.                     isDown = true;
  112.                     isUpward = false;
  113. /**
  114.  * make this differnce of 1, otherwise it moves very fast and
  115.  * nothing shows clearly
  116.  */
  117.                     if (downPointClone - movablePoint > 1) {
  118.                         mainPoint = mainPoint + (-(downPointClone - movablePoint));
  119.                         downPointClone = movablePoint;
  120.                         invalidate();
  121.                     }
  122.                 } else {
  123. // downwards
  124.                     if (isMove) {
  125. /**
  126.  * if user first starts moving upward and then downwards,
  127.  * then this method makes it to move upward
  128.  */
  129.                         if (isDown) {
  130.                             downpoint = event.getY();
  131.                             downPointClone = downpoint;
  132.                         }
  133.                         isDown = false;
  134.                         isUpward = true;
  135.                         if (movablePoint - downpoint > 1) {
  136.                             mainPoint = mainPoint + ((movablePoint - downPointClone));
  137.                             downPointClone = movablePoint;
  138.                             if (mainPoint > 0) {
  139.                                 mainPoint = 0;
  140.                                 isMove = false;
  141.                             }
  142.                             invalidate();
  143.                         }
  144.                     }
  145.                 }
  146.                 break;
  147.             case MotionEvent.ACTION_UP:
  148.                 System.out.println("up");
  149.             default:
  150.                 break;
  151.         }
  152.         return true;
  153.     }
  154.  
  155.     public void setStartingPoint(float point) {
  156.         userStartingPoint = point;
  157.         isSizeChanged = true;
  158.         if (isFirstTime) {
  159.             isFirstTime = false;
  160.             if (mListener != null) {
  161.                 mListener.onViewUpdate(point);
  162.             }
  163.         }
  164.     }
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement