Advertisement
Guest User

Untitled

a guest
May 9th, 2013
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.36 KB | None | 0 0
  1. public class DrawView extends View
  2. {
  3. private Canvas m_Canvas;
  4.  
  5. private Path m_Path;
  6.  
  7. private Paint m_Paint;
  8.  
  9. ArrayList<Pair<Path, Paint>> arrayListPaths = new ArrayList<Pair<Path, Paint>>();
  10.  
  11. ArrayList<Pair<Path, Paint>> undonePaths = new ArrayList<Pair<Path, Paint>>();
  12.  
  13. private float mX, mY;
  14.  
  15. private Bitmap bitmapToCanvas;
  16.  
  17. private static final float TOUCH_TOLERANCE = 4;
  18.  
  19. public DrawView(Context context)
  20. {
  21. super(context);
  22. setFocusable(true);
  23. setFocusableInTouchMode(true);
  24. // this.setOnTouchListener(this);
  25.  
  26. onCanvasInitialization();
  27. }
  28.  
  29. public void onCanvasInitialization()
  30. {
  31. m_Paint = new Paint();
  32. m_Paint.setAntiAlias(true);
  33. m_Paint.setDither(true);
  34. m_Paint.setColor(Color.parseColor("#37A1D1"));
  35. m_Paint.setStyle(Paint.Style.STROKE);
  36. m_Paint.setStrokeJoin(Paint.Join.ROUND);
  37. m_Paint.setStrokeCap(Paint.Cap.ROUND);
  38. m_Paint.setStrokeWidth(2);
  39.  
  40. m_Path = new Path();
  41. }
  42.  
  43. @Override
  44. protected void onSizeChanged(int w, int h, int oldw, int oldh)
  45. {
  46. super.onSizeChanged(w, h, oldw, oldh);
  47.  
  48. bitmapToCanvas = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
  49. m_Canvas = new Canvas(bitmapToCanvas);
  50. }
  51.  
  52. @Override
  53. protected void onDraw(Canvas canvas)
  54. {
  55. canvas.drawBitmap(bitmapToCanvas, 0f, 0f, null);
  56. canvas.drawPath(m_Path, m_Paint);
  57. }
  58.  
  59. public void onDrawCanvas()
  60. {
  61. for (Pair<Path, Paint> p : arrayListPaths)
  62. {
  63. m_Canvas.drawPath(p.first, p.second);
  64. }
  65. }
  66.  
  67. @Override
  68. public boolean onTouchEvent(MotionEvent event)
  69. {
  70. super.onTouchEvent(event);
  71.  
  72. int action = event.getActionMasked();
  73. int pointerIndex = event.getActionIndex();
  74.  
  75. switch (action)
  76. {
  77. case MotionEvent.ACTION_DOWN:
  78. case MotionEvent.ACTION_POINTER_DOWN:
  79. {
  80. touch_start(event.getX(pointerIndex), event.getY(pointerIndex));
  81. break;
  82. }
  83. case MotionEvent.ACTION_MOVE:
  84. {
  85. for(int j = 0; j < event.getHistorySize(); j++)
  86. {
  87. for(int i = 0; i < event.getPointerCount(); i++)
  88. {
  89. touch_move(event.getHistoricalX(i, j), event.getHistoricalY(i, j));
  90. }
  91. }
  92. for(int i = 0; i < event.getPointerCount(); i++)
  93. {
  94. touch_move(event.getX(i), event.getY(i));
  95. }
  96. break;
  97. }
  98. case MotionEvent.ACTION_UP:
  99. case MotionEvent.ACTION_POINTER_UP:
  100. {
  101. touch_up();
  102. }
  103. break;
  104. case MotionEvent.ACTION_OUTSIDE:
  105. break;
  106. }
  107.  
  108. invalidate();
  109. return true;
  110. }
  111.  
  112. private void touch_start(float x, float y)
  113. {
  114. undonePaths.clear();
  115. m_Path.reset();
  116. m_Path.moveTo(x, y);
  117. mX = x;
  118. mY = y;
  119. }
  120.  
  121. private void touch_move(float x, float y)
  122. {
  123. float dx = Math.abs(x - mX);
  124. float dy = Math.abs(y - mY);
  125. if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE)
  126. {
  127. m_Path.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
  128. mX = x;
  129. mY = y;
  130. }
  131. }
  132. private void touch_up()
  133. {
  134. m_Path.lineTo(mX, mY);
  135.  
  136. // commit the path to our offscreen
  137. m_Canvas.drawPath(m_Path, m_Paint);
  138.  
  139. // kill this so we don't double draw
  140. Paint newPaint = new Paint(m_Paint); // Clones the mPaint object
  141. arrayListPaths.add(new Pair<Path, Paint>(m_Path, newPaint));
  142. m_Path = new Path();
  143. }
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement