Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import android.app.Activity;
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.util.AttributeSet;
- import android.view.MotionEvent;
- import android.view.View;
- import java.util.ArrayList;
- import java.util.Random;
- /**
- * Created by David Olsen, 2015
- * Public Domain. Use for anything.
- */
- public class CirclesView extends View {
- Random random = new Random();
- ArrayList<Circle> circles = new ArrayList<>();
- Activity activity;
- public CirclesView(Context context) {
- super(context);
- this.activity = (Activity) context;
- init();
- }
- public CirclesView(Context context, AttributeSet attrs) {
- super(context, attrs);
- this.activity = (Activity) context;
- init();
- }
- public CirclesView(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- this.activity = (Activity) context;
- init();
- }
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- int action = event.getAction();
- if (action == MotionEvent.ACTION_UP) {
- circles.add(new Circle(event.getX(),event.getY(), 10, Color.argb(255, random.nextInt(255), random.nextInt(255), random.nextInt(255))));
- }
- return true;
- }
- private void init() {
- circles.add(new Circle(50, 100, 10, Color.GREEN));
- circles.add(new Circle(300, 150, 10, Color.GRAY));
- circles.add(new Circle(100, 300, 10, Color.MAGENTA));
- circles.add(new Circle(50, 350, 10, Color.RED));
- circles.add(new Circle(300, 350, 10, Color.BLUE));
- Thread t = new Thread(new Runnable() {
- @Override
- public void run() {
- while (true) {
- try {
- Thread.sleep(100);
- tick();
- } catch (InterruptedException e) {
- return;
- }
- }
- }
- });
- t.start();
- }
- public void tick() {
- activity.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- for (Circle circle : circles) {
- circle.translate(random.nextInt(10) - 5, random.nextInt(10) - 5);
- }
- }
- });
- }
- @Override
- protected void onDraw(Canvas canvas) {
- for (Circle c : circles) {
- c.draw(canvas);
- }
- }
- private class Circle {
- public float cx, cy;
- public float radius;
- public Paint paint;
- public Circle(float cx, float cy, float radius, int color) {
- this.cx = cx;
- this.cy = cy;
- this.radius = radius;
- this.paint = new Paint();
- paint.setColor(color);
- }
- public void translate(int dx, int dy) {
- invalidate((int) (cx - radius), (int) (cy - radius), (int) (cx + radius + 1), (int) (cy + radius + 1));
- cx += dx;
- cy += dy;
- invalidate((int) (cx - radius), (int) (cy - radius), (int) (cx + radius + 1), (int) (cy + radius + 1));
- }
- public void draw(Canvas canvas) {
- canvas.drawCircle(cx, cy, radius, paint);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement