Advertisement
Tatarize

Circles View, Example Code

Sep 29th, 2015
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 KB | None | 0 0
  1.  
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.graphics.Canvas;
  5. import android.graphics.Color;
  6. import android.graphics.Paint;
  7. import android.util.AttributeSet;
  8. import android.view.MotionEvent;
  9. import android.view.View;
  10.  
  11. import java.util.ArrayList;
  12. import java.util.Random;
  13.  
  14.  
  15. /**
  16. * Created by David Olsen, 2015
  17. * Public Domain. Use for anything.
  18. */
  19.  
  20. public class CirclesView extends View {
  21. Random random = new Random();
  22. ArrayList<Circle> circles = new ArrayList<>();
  23. Activity activity;
  24.  
  25. public CirclesView(Context context) {
  26. super(context);
  27. this.activity = (Activity) context;
  28. init();
  29. }
  30.  
  31. public CirclesView(Context context, AttributeSet attrs) {
  32. super(context, attrs);
  33. this.activity = (Activity) context;
  34. init();
  35. }
  36.  
  37. public CirclesView(Context context, AttributeSet attrs, int defStyleAttr) {
  38. super(context, attrs, defStyleAttr);
  39. this.activity = (Activity) context;
  40. init();
  41. }
  42.  
  43. @Override
  44. public boolean onTouchEvent(MotionEvent event) {
  45. int action = event.getAction();
  46. if (action == MotionEvent.ACTION_UP) {
  47. circles.add(new Circle(event.getX(),event.getY(), 10, Color.argb(255, random.nextInt(255), random.nextInt(255), random.nextInt(255))));
  48. }
  49. return true;
  50. }
  51.  
  52. private void init() {
  53. circles.add(new Circle(50, 100, 10, Color.GREEN));
  54. circles.add(new Circle(300, 150, 10, Color.GRAY));
  55. circles.add(new Circle(100, 300, 10, Color.MAGENTA));
  56. circles.add(new Circle(50, 350, 10, Color.RED));
  57. circles.add(new Circle(300, 350, 10, Color.BLUE));
  58. Thread t = new Thread(new Runnable() {
  59. @Override
  60. public void run() {
  61.  
  62. while (true) {
  63. try {
  64. Thread.sleep(100);
  65. tick();
  66.  
  67. } catch (InterruptedException e) {
  68. return;
  69. }
  70. }
  71. }
  72. });
  73. t.start();
  74. }
  75.  
  76. public void tick() {
  77. activity.runOnUiThread(new Runnable() {
  78. @Override
  79. public void run() {
  80. for (Circle circle : circles) {
  81. circle.translate(random.nextInt(10) - 5, random.nextInt(10) - 5);
  82. }
  83. }
  84. });
  85.  
  86. }
  87.  
  88.  
  89. @Override
  90. protected void onDraw(Canvas canvas) {
  91. for (Circle c : circles) {
  92. c.draw(canvas);
  93. }
  94. }
  95.  
  96. private class Circle {
  97.  
  98. public float cx, cy;
  99. public float radius;
  100. public Paint paint;
  101.  
  102. public Circle(float cx, float cy, float radius, int color) {
  103. this.cx = cx;
  104. this.cy = cy;
  105. this.radius = radius;
  106. this.paint = new Paint();
  107. paint.setColor(color);
  108. }
  109.  
  110. public void translate(int dx, int dy) {
  111. invalidate((int) (cx - radius), (int) (cy - radius), (int) (cx + radius + 1), (int) (cy + radius + 1));
  112. cx += dx;
  113. cy += dy;
  114. invalidate((int) (cx - radius), (int) (cy - radius), (int) (cx + radius + 1), (int) (cy + radius + 1));
  115. }
  116.  
  117. public void draw(Canvas canvas) {
  118. canvas.drawCircle(cx, cy, radius, paint);
  119. }
  120. }
  121.  
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement