Guest User

Untitled

a guest
May 26th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.50 KB | None | 0 0
  1. class MainActivity : AppCompatActivity() {
  2. internal lateinit var dv: DrawingView
  3. var points: ArrayList<IntermediatePoint>? = null
  4. private var mPaint: Paint? = null
  5.  
  6. override fun onCreate(savedInstanceState: Bundle?) {
  7. super.onCreate(savedInstanceState)
  8. dv = DrawingView(this)
  9. setContentView(dv)
  10. mPaint = Paint()
  11. mPaint!!.isAntiAlias = true
  12. mPaint!!.isDither = true
  13. mPaint!!.color = Color.GREEN
  14. mPaint!!.style = Paint.Style.STROKE
  15. mPaint!!.strokeJoin = Paint.Join.ROUND
  16. mPaint!!.strokeCap = Paint.Cap.ROUND
  17. mPaint!!.strokeWidth = 12f
  18. points = ArrayList();
  19.  
  20.  
  21. }
  22.  
  23. inner class DrawingView(internal var context: Context) : View(context) {
  24.  
  25. var width: Int? = 0
  26. var height: Int? = 0
  27. private var mBitmap: Bitmap? = null
  28. private var mCanvas: Canvas? = null
  29. private val mPath: Path
  30. private val mBitmapPaint: Paint
  31. private val circlePaint: Paint
  32. private val circlePath: Path
  33.  
  34. private var mX: Float = 0.toFloat()
  35. private var mY: Float = 0.toFloat()
  36. private val TOUCH_TOLERANCE = 4f
  37.  
  38.  
  39. init {
  40. mPath = Path()
  41. mBitmapPaint = Paint(Paint.DITHER_FLAG)
  42. circlePaint = Paint()
  43. circlePath = Path()
  44. circlePaint.isAntiAlias = true
  45. circlePaint.color = Color.BLUE
  46. circlePaint.style = Paint.Style.STROKE
  47. circlePaint.strokeJoin = Paint.Join.MITER
  48. circlePaint.strokeWidth = 4f
  49. }
  50.  
  51. override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
  52. super.onSizeChanged(w, h, oldw, oldh)
  53.  
  54. mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888)
  55. mCanvas = Canvas(mBitmap!!)
  56. }
  57.  
  58. override fun onDraw(canvas: Canvas) {
  59. super.onDraw(canvas)
  60.  
  61.  
  62.  
  63. canvas.drawBitmap(mBitmap!!, 0f, 0f, mBitmapPaint)
  64.  
  65. canvas.drawPath(mPath, mPaint!!)
  66. canvas.drawPath(circlePath, circlePaint)
  67.  
  68. }
  69.  
  70. private fun touch_start(x: Float, y: Float) {
  71.  
  72. mPath.reset()
  73. mPath.moveTo(x, y)
  74. mX = x
  75. mY = y
  76.  
  77. }
  78.  
  79. private fun touch_move(x: Float, y: Float) {
  80. val dx = Math.abs(x - mX)
  81. val dy = Math.abs(y - mY)
  82. if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
  83. mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2)
  84. mX = x
  85. mY = y
  86.  
  87. circlePath.reset()
  88. Log.d("KAK","TAK");
  89.  
  90. circlePath.addCircle(mX, mY, 30f, Path.Direction.CW)
  91.  
  92. }
  93. }
  94.  
  95. private fun touch_up() {
  96. mPath.lineTo(mX, mY)
  97. circlePath.reset()
  98. // commit the path to our offscreen
  99. mCanvas!!.drawPath(mPath, mPaint!!)
  100. // kill this so we don't double draw
  101. mPath.reset()
  102. mCanvas?.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)
  103.  
  104. // for (item in points!!){
  105. // Log.d("TEST X: ", item.x.toString())
  106. // Log.d("TEST Y: ", item.y.toString())
  107. // Log.d("TEST TIME: ", item.time.toString())
  108. // }
  109.  
  110.  
  111. }
  112.  
  113. override fun onTouchEvent(event: MotionEvent): Boolean {
  114.  
  115.  
  116. val x = event.x
  117. val y = event.y
  118. val time = System.currentTimeMillis()
  119. Log.d("WTF", time.toString())
  120. Log.d("KEK ", "xMain: = )$x yMain: = $y")
  121.  
  122. // var point:IntermediatePoint = IntermediatePoint(time,x,y);
  123. // points?.add(point)
  124.  
  125.  
  126. when (event.action) {
  127. MotionEvent.ACTION_DOWN -> {
  128. Log.d("KEK ", "xStart: = )$x yStart: = $y")
  129. var point: IntermediatePoint = IntermediatePoint(time, x, y);
  130. points?.add(point)
  131. touch_start(x, y)
  132. invalidate()
  133. }
  134. MotionEvent.ACTION_MOVE -> {
  135.  
  136. Log.d("KEK ", "xMove: = )$x yMove: = $y")
  137. var point: IntermediatePoint = IntermediatePoint(time, x, y);
  138. points?.add(point)
  139. touch_move(x, y)
  140. invalidate()
  141. }
  142. MotionEvent.ACTION_UP -> {
  143. Log.d("KEK ", "xUp: = )$x yUp: = $y")
  144.  
  145. var point: IntermediatePoint = IntermediatePoint(time, x, y);
  146. points?.add(point)
  147. touch_up()
  148. invalidate()
  149.  
  150. Handler().postDelayed(Runnable {
  151.  
  152. for (i in points!!.indices) {
  153.  
  154. Log.d("KEK ", "xStartPost: = )${points!![i].x} yStartPost: = ${points!![i].y}")
  155. if (i == 0) {
  156. touch_start(points!![0].x, points!![0].y)
  157. invalidate();
  158. } else if (i == points!!.size - 1) {
  159. touch_move(points!![i].x, points!![i].y)
  160. invalidate();
  161. } else {
  162. touch_move(points!![i].x, points!![i].y)
  163. invalidate();
  164. }
  165. }
  166.  
  167. points?.clear()
  168.  
  169. }, 5000)
  170.  
  171.  
  172. }
  173. }
  174.  
  175.  
  176. return true
  177. }
  178.  
  179.  
  180.  
  181.  
  182.  
  183. }
  184. }
Add Comment
Please, Sign In to add comment