mardi 31 mars 2015

Creating a random circle that can be clicked on like a button but is a circle

so here is my predicament i cannot seem to find this anywhere on the internet. My question is simple. I am creating a game app for android. The game will generate random circles on the screen that a user can click on then once the user does click on one of these random circles an action will occur. This is just like the function of the button, but different because the whole circle will be able to be clicked. I will post the random number generator that generates the circles. This is not the main class this is a separate class that extends view. I have attempted to do this below in the onTouchEvent method, but now i get errors in the logcat i have posted those below as well a long with the main class. please i feel as if i am very close to finding a solution to this problem. if anyone could tell me what i am doing wrong in this class that would be very helpful thanks everyone



public class DrawingView extends View {



public DrawingView(Context context) {
super(context);
// TODO Auto-generated constructor stub

}
RectF rectf = new RectF(0, 0, 200, 0);

private static final int w = 100;
public static int lastColor = Color.BLACK;
private final Random random = new Random();
private final Paint paint = new Paint();
private final int radius = 230;
private final Handler handler = new Handler();
public static int redColor = Color.RED;
public static int greenColor = Color.GREEN;
int randomWidth =(int) (random.nextInt(getWidth()-radius/2) + radius/2f);
int randomHeight = (random.nextInt((int) (getHeight()-radius/2 + radius/2f)));

private final Runnable updateCircle = new Runnable() {
@Override
public void run() {
lastColor = random.nextInt(2) == 1 ? redColor : greenColor;
paint.setColor(lastColor);
invalidate();
handler.postDelayed(this, 1000);

}
};



@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
handler.post(updateCircle);
}

@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
handler.removeCallbacks(updateCircle);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// your other stuff here

canvas.drawCircle(randomWidth, randomHeight + radius/2f, radius, paint);
}

@Override
public boolean onTouchEvent (MotionEvent event) {

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN :
randomWidth = (int) event.getX();
randomHeight = (int) event.getY();
invalidate();
break;
}

return true;

}


tell me if this can even be done or if im going to have to completely change my code thank you here is my main class if that helps any this is the only other code i have so here it is please disregard the comments i was trying to learn this on my own and horribly failed each time



public class Main extends Activity {
DrawingView v;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);


LinearLayout layout1 = new LinearLayout (this);
FrameLayout game = new FrameLayout(this);
DrawingView v = new DrawingView (this);

TextView myText = new TextView(this);

//int w = getResources().getInteger(DrawingView.redColor);
//Button redCircle = (Button) findViewById(w);



//redCircle.setWidth(300);
//redCircle.setText("Start Game");


layout1.addView(myText);
// layout1.addView(redCircle);
//redCircle.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

//game.addView(myText);
game.addView(v);
game.addView(layout1);
setContentView(game);
//redCircle.setOnClickListener((OnClickListener) this);
}
public void onClick(View v) {
Intent intent = new Intent(this, Main.class);
startActivity(intent);

// re-starts this activity from game-view. add this.finish(); to remove from stack
}

@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}


I get these errors now in the log cat



03-31 01:48:52.594: E/AndroidRuntime(2395): FATAL EXCEPTION: main
03-31 01:48:52.594: E/AndroidRuntime(2395): Process: com.Tripps.thesimplegame, PID: 2395
03-31 01:48:52.594: E/AndroidRuntime(2395): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Tripps.thesimplegame/com.Tripps.thesimplegame.Main}: java.lang.IllegalArgumentException: n <= 0: -115
03-31 01:48:52.594: E/AndroidRuntime(2395): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
03-31 01:48:52.594: E/AndroidRuntime(2395): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
03-31 01:48:52.594: E/AndroidRuntime(2395): at android.app.ActivityThread.access$800(ActivityThread.java:144)
03-31 01:48:52.594: E/AndroidRuntime(2395): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
03-31 01:48:52.594: E/AndroidRuntime(2395): at android.os.Handler.dispatchMessage(Handler.java:102)
03-31 01:48:52.594: E/AndroidRuntime(2395): at android.os.Looper.loop(Looper.java:135)
03-31 01:48:52.594: E/AndroidRuntime(2395): at android.app.ActivityThread.main(ActivityThread.java:5221)
03-31 01:48:52.594: E/AndroidRuntime(2395): at java.lang.reflect.Method.invoke(Native Method)
03-31 01:48:52.594: E/AndroidRuntime(2395): at java.lang.reflect.Method.invoke(Method.java:372)
03-31 01:48:52.594: E/AndroidRuntime(2395): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
03-31 01:48:52.594: E/AndroidRuntime(2395): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
03-31 01:48:52.594: E/AndroidRuntime(2395): Caused by: java.lang.IllegalArgumentException: n <= 0: -115
03-31 01:48:52.594: E/AndroidRuntime(2395): at java.util.Random.nextInt(Random.java:182)
03-31 01:48:52.594: E/AndroidRuntime(2395): at com.Tripps.thesimplegame.DrawingView.<init>(DrawingView.java:37)
03-31 01:48:52.594: E/AndroidRuntime(2395): at com.Tripps.thesimplegame.Main.onCreate(Main.java:30)
03-31 01:48:52.594: E/AndroidRuntime(2395): at android.app.Activity.performCreate(Activity.java:5933)
03-31 01:48:52.594: E/AndroidRuntime(2395): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
03-31 01:48:52.594: E/AndroidRuntime(2395): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
03-31 01:48:52.594: E/AndroidRuntime(2395): ... 10 more




Aucun commentaire:

Enregistrer un commentaire