user3242607
user3242607

Reputation: 219

Drawing random Circles in Random Locations in Random Sizes Android

I have made a lot of progress on this assignment. The final product needs to add a circle in a random color/random size/random location after each click of a button(circle). I have another button(clear) that needs to clear the canvas. Here are the two problems i'm facing now. My circles are not being displayed in random locations. They all start from the top left of the screen. Second problem is that i have no idea how to get my clear button working. Everything else is working, random circles colors in random circle sizes.

package com.example.randomcircles;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;

public class DisplayRandomCircles extends Activity
{
FrameLayout f1;
@Override
public void onCreate(Bundle b)
{
    super.onCreate(b);
    setContentView(R.layout.activity_display_random_circles);
    Button btn1 = (Button) findViewById(R.id.btn1);
    Button btn2 = (Button) findViewById(R.id.btn2);
    f1 = (FrameLayout) findViewById(R.id.frame);


}
@SuppressLint("WrongCall")
public void doit(View v)
{

    int rand = (int) (Math.random() * 60);
    switch (v.getId())
    {
        case (R.id.btn1):
            DrawCircle c = new DrawCircle(getApplicationContext());
            f1.addView(c);
            break;

        case (R.id.btn2):
            DrawCircle d = new DrawCircle(getApplicationContext());
            f1.addView(d);
            break;
    }
}
}

package com.example.randomcircles;

import java.util.Random;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class DrawCircle extends View
{
int red = (int) (Math.random() * 255);
int green = (int) (Math.random() * 255);
int blue = (int) (Math.random() * 255);
public DrawCircle(Context con)
{
    super(con);
}
@SuppressLint("DrawAllocation")
@Override
public void onDraw(Canvas c)
{
    super.onDraw(c);
    int color = Color.rgb(red, green, blue);
    int rand = (int)(Math.random() * 200);
    Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
    p.setAntiAlias(true);
    p.setStyle(Paint.Style.STROKE);
    p.setStrokeWidth(100);
    p.setColor(color);
    p.setStyle(Paint.Style.FILL);
    c.drawCircle(rand, rand, rand, p);
    clear(c);

}
public void clear(Canvas c)
{
    c.drawColor(Color.TRANSPARENT);
}
public void drawColor(int transparent) {
    // TODO Auto-generated method stub

}
}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<FrameLayout
    android:id="@+id/frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight=".75"
    android:orientation="vertical" >


</FrameLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight=".25"
    android:gravity="bottom|center"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start|bottom"
        android:layout_weight=".50"
        android:onClick="doit"
        android:text="@string/Circle" />

    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight=".50"
        android:layout_gravity="end|bottom"
        android:onClick="doit"
        android:text="@string/Clear" />
</LinearLayout>

</LinearLayout>

Upvotes: 2

Views: 3426

Answers (1)

moh.sukhni
moh.sukhni

Reputation: 2230

Your random function is not effective to draw circles on the current view (most likely because you have high resolution device) you have to get with and height of the view to draw your circle on it randomly.

    int minRadius = 100;
    Random random = new Random();//define this outside you onDraw fucntion 
    int w = getWidth();
    int h = getHeight();

    int randX = random.nextInt(w);
    int randY = random.nextInt(h);
    int randR = minRadius + random.nextInt(100);
    ...
    c.drawCircle(randX, randY, randR, p);

also reset you view by drawing color on you whole canvas

canvas.drawColor(Color.WHITLE);

Upvotes: 2

Related Questions