Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class CustomScale extends View {
- static int screenSize = 480;
- static private float pxmm = screenSize / 67.f;
- int width, height, midScreenPoint;
- float startingPoint = 0;
- float downpoint = 0, movablePoint = 0, downPointClone = 0;
- private float mainPoint = 0, mainPointClone = 0;
- boolean isDown = false;
- boolean isUpward = false;
- private boolean isMove;
- private onViewUpdateListener mListener;
- private Paint rulerPaint, pinkPaint;
- private int endPoint;
- boolean isSizeChanged = false;
- float userStartingPoint = 0f;
- private int scaleLineMedium;
- private int scaleLineLarge;
- boolean isFirstTime = true;
- public CustomScale(Context context, AttributeSet foo) {
- super(context, foo);
- if (!isInEditMode()) {
- init(context);
- }
- }
- public interface onViewUpdateListener{
- void onViewUpdate(float result);
- }
- private void init(Context context) {
- rulerPaint = new Paint();
- rulerPaint.setStyle(Paint.Style.STROKE);
- rulerPaint.setStrokeWidth(2);
- rulerPaint.setAntiAlias(false);
- rulerPaint.setColor(Color.BLACK);
- pinkPaint = new Paint();
- pinkPaint.setStyle(Paint.Style.STROKE);
- pinkPaint.setStrokeWidth(4);
- pinkPaint.setAntiAlias(false);
- pinkPaint.setColor(ContextCompat.getColor(context , R.color.button_pink));
- scaleLineMedium = (int) getResources().getDimension(R.dimen.scale_line_medium);
- scaleLineLarge = (int) getResources().getDimension(R.dimen.scale_line_large);
- }
- public void setUpdateListener(onViewUpdateListener onViewUpdateListener) {
- mListener = onViewUpdateListener;
- }
- @Override
- public void onSizeChanged(int w, int h, int oldW, int oldH) {
- width = w;
- height = h;
- screenSize = height;
- pxmm = screenSize / 22.f;
- midScreenPoint = height / 2;
- endPoint = width - 40;
- if (isSizeChanged) {
- isSizeChanged = false;
- mainPoint = midScreenPoint - (userStartingPoint * 10 * pxmm);
- }
- }
- @Override
- public void onDraw(Canvas canvas) {
- startingPoint = mainPoint;
- for (int i = 5;; ++i) {
- if (startingPoint > screenSize) {
- break;
- }
- startingPoint = startingPoint + pxmm;
- int size = (i % 5 == 0) ? endPoint - scaleLineLarge : endPoint - scaleLineMedium ;
- canvas.drawLine(0, startingPoint, endPoint - size, startingPoint, rulerPaint);
- }
- canvas.drawLine(0, midScreenPoint, endPoint , midScreenPoint, pinkPaint);
- }
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- System.out.println("touch event fire");
- mainPointClone = mainPoint;
- if (mainPoint < 0) {
- mainPointClone = -mainPoint;
- }
- float clickPoint = ((midScreenPoint + mainPointClone) / (pxmm * 10));
- if (mListener != null) {
- mListener.onViewUpdate((midScreenPoint + mainPointClone) / (pxmm * 10));
- }
- System.out.println("click point" + clickPoint + "");
- switch (event.getAction()) {
- case MotionEvent.ACTION_DOWN:
- isMove = true;
- isDown = false;
- isUpward = false;
- downpoint = event.getY();
- downPointClone = event.getY();
- break;
- case MotionEvent.ACTION_MOVE:
- movablePoint = event.getY();
- if (downPointClone > movablePoint) {
- /**
- * if user first starts moving downward and then upwards then
- * this method makes it to move upward
- */
- if (isUpward) {
- downpoint = event.getY();
- downPointClone = downpoint;
- }
- isDown = true;
- isUpward = false;
- /**
- * make this differnce of 1, otherwise it moves very fast and
- * nothing shows clearly
- */
- if (downPointClone - movablePoint > 1) {
- mainPoint = mainPoint + (-(downPointClone - movablePoint));
- downPointClone = movablePoint;
- invalidate();
- }
- } else {
- // downwards
- if (isMove) {
- /**
- * if user first starts moving upward and then downwards,
- * then this method makes it to move upward
- */
- if (isDown) {
- downpoint = event.getY();
- downPointClone = downpoint;
- }
- isDown = false;
- isUpward = true;
- if (movablePoint - downpoint > 1) {
- mainPoint = mainPoint + ((movablePoint - downPointClone));
- downPointClone = movablePoint;
- if (mainPoint > 0) {
- mainPoint = 0;
- isMove = false;
- }
- invalidate();
- }
- }
- }
- break;
- case MotionEvent.ACTION_UP:
- System.out.println("up");
- default:
- break;
- }
- return true;
- }
- public void setStartingPoint(float point) {
- userStartingPoint = point;
- isSizeChanged = true;
- if (isFirstTime) {
- isFirstTime = false;
- if (mListener != null) {
- mListener.onViewUpdate(point);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement