Guest User

Untitled

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