// Path: sak-nop/src/main/java/com/wanjian/sak/converter/ISizeConverter.java
// public abstract class ISizeConverter {
//     public static ISizeConverter CONVERTER;
// 
//     public abstract String desc();
// 
//     public abstract Size convert(Context context, float length);
// 
//     public abstract int recovery(Context context, float length);
// 
// }
// 
// Path: saklib/src/main/java/com/wanjian/sak/layer/ISize.java
// public interface ISize {
//   void onSizeConvertChange(ISizeConverter converter);
// }
// 
// Path: saklib/src/main/java/com/wanjian/sak/layer/Layer.java
// public abstract class Layer implements EventListener {
//   private ViewRootImpl viewRootImpl;
//   private Config config;
//   private Application application;
//   private LayerRoot layerRoot;
//   private RenderNodeCompact renderNode;
//   private View rootView;
//   private boolean isEnable;
// 
//   public Layer() {
// 
//   }
// 
//   public RenderNodeCompact getRenderNode() {
//     return renderNode;
//   }
// 
//   public final void attach(Config config, ViewRootImpl viewRoot, View rootView, Application application, LayerRoot layerRoot) {
//     this.viewRootImpl = viewRoot;
//     this.config = config;
//     this.application = application;
//     this.layerRoot = layerRoot;
//     this.rootView = rootView;
//     renderNode = RenderNodeCompact.create(getClass().getName());
//     onAttach(getRootView());
//   }
// 
// //
// //  private final Canvas requireCanvas() {
// //    return CanvasHolder.requireCanvasFor(viewRootImpl);
// //  }
// //
// //  private final void releaseCanvas() {
// //    CanvasHolder.releaseCanvasFor(viewRootImpl);
// //  }
// 
//   protected void invalidate() {
// //    renderNode.setLeftTopRightBottom(0, 0, getRootView().getWidth(), getRootView().getHeight());
// //    DisplayListCanvas displayListCanvas = renderNode.start(getRootView().getWidth(), getRootView().getHeight());
// //    onDraw(displayListCanvas);
// //    renderNode.end(displayListCanvas);
//     View view = getRootView();
//     if (view == null) {
//       return;
//     }
//     Canvas canvas = renderNode.beginRecording(view.getWidth(), view.getHeight());
//     draw(canvas);
//     renderNode.endRecording(canvas);
//     layerRoot.invalidate();
//   }
// 
//   private void draw(Canvas canvas) {
//     if (isEnable == false) {
//       canvas.drawColor(0);
//       return;
//     }
//     onDraw(canvas);
//   }
// 
//   public final boolean isEnable() {
//     return isEnable;
//   }
// 
//   public final void enable(boolean enable) {
//     isEnable = enable;
//     invalidate();
//     onEnableChange(enable);
//   }
// 
//   protected void onEnableChange(boolean enable) {
//   }
// 
//   protected void onDraw(Canvas canvas) {
// 
//   }
// 
//   @Override
//   public final void beforeTraversal(View rootView) {
//     onBeforeTraversal(rootView);
//   }
// 
//   @Override
//   public final void afterTraversal(View rootView) {
//     onAfterTraversal(rootView);
//   }
// 
//   @Override
//   public final boolean beforeInputEvent(View rootView, InputEvent event) {
//     //rootView.invalidate();
//     return onBeforeInputEvent(rootView, event);
//   }
// 
//   @Override
//   public final void afterInputEvent(View rootView, InputEvent event) {
//     //rootView.invalidate();
//     onAfterInputEvent(rootView, event);
//   }
// 
//   protected View getRootView() {
//     return rootView;
//   }
// 
//   protected void onBeforeTraversal(View rootView) {
//   }
// 
//   protected void onAfterTraversal(View rootView) {
//   }
// 
//   protected boolean onBeforeInputEvent(View rootView, InputEvent event) {
//     return false;
//   }
// 
//   protected void onAfterInputEvent(View rootView, InputEvent event) {
//   }
// 
//   protected void onAttach(View rootView) {
// 
//   }
// 
//   protected Application getContext() {
//     return application;
//   }
// }
// 
// Path: saklib/src/main/java/com/wanjian/sak/utils/ScreenUtils.java
// public class ScreenUtils {
// 
//   public static int dp2px(Context context, int dip) {
//     float density = context.getResources().getDisplayMetrics().density;
//     return (int) (dip * density + 0.5);
//   }
// 
//   public static int px2dp(Context context, float pxValue) {
//     final float scale = context.getResources().getDisplayMetrics().density;
//     return (int) (pxValue / scale + 0.5f);
//   }
// 
// }


import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.InputEvent;
import android.view.MotionEvent;
import android.view.View;
import com.wanjian.sak.converter.ISizeConverter;
import com.wanjian.sak.layer.ISize;
import com.wanjian.sak.layer.Layer;
import com.wanjian.sak.utils.ScreenUtils;
  private float lastX, lastY;
  private Rect rect = new Rect();

  @Override
  protected void onAttach(View rootView) {
    super.onAttach(rootView);
    init();
  }


  private void init() {
    mPaint.setColor(Color.BLACK);
    m20DP = ScreenUtils.dp2px(getContext(), 20);
    mPaint.setTextSize(ScreenUtils.dp2px(getContext(), 8));
    maxHeight = ScreenUtils.dp2px(getContext(), 10);
    minHeight = ScreenUtils.dp2px(getContext(), 5);
    height = ScreenUtils.dp2px(getContext(), 60);
    rect.left = 0;
    rect.top = (int) (getRootView().getHeight() / 2f - height / 2f);
    rect.right = getRootView().getWidth();
    rect.bottom = (int) (getRootView().getHeight() / 2f + height / 2f);
    invalidate();
  }

  @Override
  protected void onAfterTraversal(View rootView) {
    super.onAfterTraversal(rootView);
    invalidate();
  }

// Path: sak-nop/src/main/java/com/wanjian/sak/converter/ISizeConverter.java
// public abstract class ISizeConverter {
//     public static ISizeConverter CONVERTER;
// 
//     public abstract String desc();
// 
//     public abstract Size convert(Context context, float length);
// 
//     public abstract int recovery(Context context, float length);
// 
// }
// 
// Path: saklib/src/main/java/com/wanjian/sak/layer/ISize.java
// public interface ISize {
//   void onSizeConvertChange(ISizeConverter converter);
// }
// 
// Path: saklib/src/main/java/com/wanjian/sak/layer/Layer.java
// public abstract class Layer implements EventListener {
//   private ViewRootImpl viewRootImpl;
//   private Config config;
//   private Application application;
//   private LayerRoot layerRoot;
//   private RenderNodeCompact renderNode;
//   private View rootView;
//   private boolean isEnable;
// 
//   public Layer() {
// 
//   }
// 
//   public RenderNodeCompact getRenderNode() {
//     return renderNode;
//   }
// 
//   public final void attach(Config config, ViewRootImpl viewRoot, View rootView, Application application, LayerRoot layerRoot) {
//     this.viewRootImpl = viewRoot;
//     this.config = config;
//     this.application = application;
//     this.layerRoot = layerRoot;
//     this.rootView = rootView;
//     renderNode = RenderNodeCompact.create(getClass().getName());
//     onAttach(getRootView());
//   }
// 
// //
// //  private final Canvas requireCanvas() {
// //    return CanvasHolder.requireCanvasFor(viewRootImpl);
// //  }
// //
// //  private final void releaseCanvas() {
// //    CanvasHolder.releaseCanvasFor(viewRootImpl);
// //  }
// 
//   protected void invalidate() {
// //    renderNode.setLeftTopRightBottom(0, 0, getRootView().getWidth(), getRootView().getHeight());
// //    DisplayListCanvas displayListCanvas = renderNode.start(getRootView().getWidth(), getRootView().getHeight());
// //    onDraw(displayListCanvas);
// //    renderNode.end(displayListCanvas);
//     View view = getRootView();
//     if (view == null) {
//       return;
//     }
//     Canvas canvas = renderNode.beginRecording(view.getWidth(), view.getHeight());
//     draw(canvas);
//     renderNode.endRecording(canvas);
//     layerRoot.invalidate();
//   }
// 
//   private void draw(Canvas canvas) {
//     if (isEnable == false) {
//       canvas.drawColor(0);
//       return;
//     }
//     onDraw(canvas);
//   }
// 
//   public final boolean isEnable() {
//     return isEnable;
//   }
// 
//   public final void enable(boolean enable) {
//     isEnable = enable;
//     invalidate();
//     onEnableChange(enable);
//   }
// 
//   protected void onEnableChange(boolean enable) {
//   }
// 
//   protected void onDraw(Canvas canvas) {
// 
//   }
// 
//   @Override
//   public final void beforeTraversal(View rootView) {
//     onBeforeTraversal(rootView);
//   }
// 
//   @Override
//   public final void afterTraversal(View rootView) {
//     onAfterTraversal(rootView);
//   }
// 
//   @Override
//   public final boolean beforeInputEvent(View rootView, InputEvent event) {
//     //rootView.invalidate();
//     return onBeforeInputEvent(rootView, event);
//   }
// 
//   @Override
//   public final void afterInputEvent(View rootView, InputEvent event) {
//     //rootView.invalidate();
//     onAfterInputEvent(rootView, event);
//   }
// 
//   protected View getRootView() {
//     return rootView;
//   }
// 
//   protected void onBeforeTraversal(View rootView) {
//   }
// 
//   protected void onAfterTraversal(View rootView) {
//   }
// 
//   protected boolean onBeforeInputEvent(View rootView, InputEvent event) {
//     return false;
//   }
// 
//   protected void onAfterInputEvent(View rootView, InputEvent event) {
//   }
// 
//   protected void onAttach(View rootView) {
// 
//   }
// 
//   protected Application getContext() {
//     return application;
//   }
// }
// 
// Path: saklib/src/main/java/com/wanjian/sak/utils/ScreenUtils.java
// public class ScreenUtils {
// 
//   public static int dp2px(Context context, int dip) {
//     float density = context.getResources().getDisplayMetrics().density;
//     return (int) (dip * density + 0.5);
//   }
// 
//   public static int px2dp(Context context, float pxValue) {
//     final float scale = context.getResources().getDisplayMetrics().density;
//     return (int) (pxValue / scale + 0.5f);
//   }
// 
// }


// Path: saklib/src/main/java/com/wanjian/sak/layer/impl/HorizontalMeasureView.java
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.InputEvent;
import android.view.MotionEvent;
import android.view.View;
import com.wanjian.sak.converter.ISizeConverter;
import com.wanjian.sak.layer.ISize;
import com.wanjian.sak.layer.Layer;
import com.wanjian.sak.utils.ScreenUtils;

  private float lastX, lastY;
  private Rect rect = new Rect();

  @Override
  protected void onAttach(View rootView) {
    super.onAttach(rootView);
    init();
  }


  private void init() {
    mPaint.setColor(Color.BLACK);
    m20DP = ScreenUtils.dp2px(getContext(), 20);
    mPaint.setTextSize(ScreenUtils.dp2px(getContext(), 8));
    maxHeight = ScreenUtils.dp2px(getContext(), 10);
    minHeight = ScreenUtils.dp2px(getContext(), 5);
    height = ScreenUtils.dp2px(getContext(), 60);
    rect.left = 0;
    rect.top = (int) (getRootView().getHeight() / 2f - height / 2f);
    rect.right = getRootView().getWidth();
    rect.bottom = (int) (getRootView().getHeight() / 2f + height / 2f);
    invalidate();
  }

  @Override
  protected void onAfterTraversal(View rootView) {
    super.onAfterTraversal(rootView);
    invalidate();
  }

  @Override