Hallo,
ich habe in Java ein kleines Programm geschrieben, welches einen Button mit s=1/2gt² zu Boden gleiten lässt. Nun wollte ich etwas ähnliches für Android machen, nur statt einem Button eine Figur.
Ich habe viel zu Canvas gefunden und damit einen Circle gezeichnet, dem ich nun mit hilfe einer while Schleife Schwerkraft beisetzen möchte.
Hinbekommen habe ich es, dass ganz viele kreise gezeichnet werden(Trifft nicht auf den aktuellen Code zu, hab da mal wieder was geändert und er Besitzt nach rückgängig machen einiger Änderungen einen Fehler, wodurch das so nicht lauffähig ist)
Ich habe als Darstellungsbereich das FrameLayout gewählt, was offenbar keine repaint() Methode besitzt.Das ist auch mein größtes Problem, denn entweder packe ich drawCircle unter die whileschleife, und er zeichnet ganz viele Kreise oder ich lasse es so wie es jetzt ist und es wird nur der erste Kreis gezeichnet.
zum repainten hab ich noch validate probiert, ohne Erfolg.
Gibt es irgendeinen Trick zum repainten?was muss überhaupt gerepaintet werden? Canvas selbst oder das LayOut? und existiert für Canvas-Objekte so etwas ähnliches wie setLocation() oder kann so ein Objekt selbstständig mit neuen Werten umgehen und es reicht die repaint methode?
MfG
ich habe in Java ein kleines Programm geschrieben, welches einen Button mit s=1/2gt² zu Boden gleiten lässt. Nun wollte ich etwas ähnliches für Android machen, nur statt einem Button eine Figur.
Ich habe viel zu Canvas gefunden und damit einen Circle gezeichnet, dem ich nun mit hilfe einer while Schleife Schwerkraft beisetzen möchte.
Java:
package de.android.myandroapp;
private final float x=100;
private final float y=100;
private final int r=100;
private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(this);
FrameLayout main = (FrameLayout)findViewById(R.id.view1);
main.setBackgroundColor(Color.WHITE);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
FrameLayout main = (FrameLayout)findViewById(R.id.view1);
main.addView(new Ball(this,50,50,25));
}
}
Java:
package de.android.myandroapp;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;
import android.widget.FrameLayout;
public class Ball extends View {
private double time;
private double g = 9.81;
private double ycoordinate;
private int ycoordinatesconverted;
private Ball ball;
private int x=10;
private int y=10;
private final int r;
private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
MyAndroApp2Activity myandroapp = new MyAndroApp2Activity();
FrameLayout main = (FrameLayout) findViewById(R.id.view1);
public void setY(int coordinatesconverted) {
this.y = coordinatesconverted;
}
public Ball(Context context, int x, int y, int r) {
super(context);
mPaint.setColor(0xFFFF0000);
this.x = x;
this.y = y;
this.r = r;
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(x, y, r, mPaint);
while(ycoordinate <= 300){
try {
Thread.sleep(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
time=time+0.1;
ycoordinate = 0.5 * g * time*time;
y = (int) ycoordinate;
}
}
}
Hinbekommen habe ich es, dass ganz viele kreise gezeichnet werden(Trifft nicht auf den aktuellen Code zu, hab da mal wieder was geändert und er Besitzt nach rückgängig machen einiger Änderungen einen Fehler, wodurch das so nicht lauffähig ist)
Ich habe als Darstellungsbereich das FrameLayout gewählt, was offenbar keine repaint() Methode besitzt.Das ist auch mein größtes Problem, denn entweder packe ich drawCircle unter die whileschleife, und er zeichnet ganz viele Kreise oder ich lasse es so wie es jetzt ist und es wird nur der erste Kreis gezeichnet.
zum repainten hab ich noch validate probiert, ohne Erfolg.
Gibt es irgendeinen Trick zum repainten?was muss überhaupt gerepaintet werden? Canvas selbst oder das LayOut? und existiert für Canvas-Objekte so etwas ähnliches wie setLocation() oder kann so ein Objekt selbstständig mit neuen Werten umgehen und es reicht die repaint methode?
MfG