2016-04-06 15 views
0

Ich arbeite an einem Projekt, das erfordert, dass ich einen Kreis an einem zufälligen Ort auf dem Bildschirm zeichne, wenn der Benutzer den Bildschirm berührt. Wenn das Berührungsereignis auftritt, muss auch der letzte Kreis, den ich gezeichnet habe, entfernt werden, so dass immer nur ein Kreis auf dem Bildschirm angezeigt werden kann.Android: Zeichne zufällige Kreise auf dem Bildschirm bei Berührung

Ich habe eine Klasse Kreis, dass ich einen Kreis erstellen:

public class Circle extends View { 
    private final float x; 
    private final float y; 
    private final int r; 
    private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 

    public Circle(Context context, float x, float y, int r) { 
     super(context); 
     mPaint.setColor(0x000000); 
     this.x = x; 
     this.y = y; 
     this.r = r; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     mPaint.setStyle(Paint.Style.FILL); 
     mPaint.setColor(Color.RED); 
     canvas.drawCircle(x, y, r, mPaint); 
    } 
} 

Dies ist die Aktivität von dem ein neuer Kreis erstellt wird. Es überwacht auch Berührungsereignisse. Im Moment zeichnet es einen Kreis in der oberen linken Ecke des Bildschirms, aber dieser Code muss in die onTouch-Methode verschoben werden. Ich werde wahrscheinlich die Zufallszahl mit Random berechnen.

public class FingerTappingActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_finger_tapping); 


     LinearLayout circle = (LinearLayout) findViewById(R.id.lt); 
     View circleView = new Circle(this, 300, 300, 150); 
     circleView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
     circle.addView(circleView); 


     circle.setOnTouchListener(new View.OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 

       return true; 
      } 
     }); 

    } 
} 

Ich habe noch nie mit Touch-Events vor solchen wie diesen gearbeitet und habe keine Ahnung, wie ich das anstellen soll. Einige Tipps würden sehr geschätzt werden.

Antwort

1

einige etwas wie dies tun,

public class DrawCircles extends View { 

    private float x = 100; 
    private float y = 100; 
    private int r = 50; 
    private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 


    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     mPaint.setStyle(Paint.Style.FILL); 
     mPaint.setColor(Color.RED); 
     canvas.drawCircle(x, y, r, mPaint); 
    } 

    public DrawCircles(Context context) { 
     super(context); 
     init(); 
    } 

    public DrawCircles(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public DrawCircles(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(); 
    } 

    void init() { 
     mPaint.setColor(0x000000); 
     // logic for random call here; 
    } 

    Random random = new Random(); 

    void generateRandom() { 
     int minRadius = 100; 
     int w = getWidth(); 
     int h = getHeight(); 
     this.x = random.nextInt(w); 
     this.y = random.nextInt(h); 
     this.r = minRadius + random.nextInt(100); 
    } 


    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     generateRandom(); 
     invalidate(); 
     return super.onTouchEvent(event); 
    } 
} 

Diese Ansicht zufällige Kreise innerhalb der Ansicht ziehen wird. Nehmen Sie einige Anpassungen vor, um x & y-Koordinaten zu erzeugen. Fügen Sie diese Ansicht zu XML hinzu, dann wird es funktionieren.

+0

Können Sie etwas mehr erklären, was genau im Code passiert? Wäre onTouch nicht in meiner Finger Tapping-Aktivität enthalten? Was macht DrawCircles und was stellt AttributeSet dar? –

+0

Gemäß meinem Code ist die Ansicht für die Behandlung des Berührungsereignisses verantwortlich. Also keine Notwendigkeit, es auf Aktivität zu behandeln. DrawCircles ist eine Ansicht, die zufällig Kreise innerhalb des Ansichtsbereichs zeichnet. AttributeSet ist der Satz von Eigenschaften, der in einer XML-Ressourcendatei angegeben ist. Fügen Sie diese Ansicht einfach in Ihre XML-Datei (activity_finger_tapping) innerhalb des Layouts (lt) ein. – Krish

+0

Okay, das macht Sinn! Was würde ich in der Finger Tapping-Aktivität OnCreate tun? So weit wie Sie einen Kreis aus der Sicht entfernen, wie gehen Sie dabei vor? –