Wie kann ich verhindern dass sich eine ImageView aus dem Bildschirm bewegt?

D

DerEntwickler

Neues Mitglied
0
Hallo,
Ich programmiere momentan ein Spiel in dem sich eine ImageView je nach Neigung des Gerätes nach links oder rechts bewegt. Und jetzt das Problem:

Wenn ich die ImageView nach rechts bewegen lasse ist sie kurz darauf am Rand angelangt und bewegt sich dann aus dem Bildschirm links konnte ich das Problem beheben aber rechts bin ich mittlerweile Ratlos.


Vielen Dank schon mal
Der Entwickler
 
Hallo Entwickler,

ohne deinem Animation-Code können wir hier Dir nicht helfen .
Unsere Kristallkugel ist da schon ein wenig leistungsschwach ... :)
 
@swa00

Hier ist mein Code:

private void move(){
player.setX(Px);
player.setY(Py);
container.invalidate();
}

Runnable moveRunnable = new Runnable() {

@override
public void run()
{
if(Px >= 0){
if(x >= 1){
Px -= geschwindigkeit;
}else if(x <=-1){
Px += geschwindigkeit;
}
//Anti nicht bewegbar

if(Px == 10){
Px += 10;
}
}


handler = new Handler();
handler.postDelayed(moveRunnable, 50);
move();

}
};
 
Hallo,

ich vermisse bei deinem Code zwei Dinge :

a) einen richtigen Thread, damit die UI frei arbeiten kann
b) die Begrenzung ( z.b. eine Abfrage der Bildschirm-Dimensions) - Ohne die wirst du ja nicht wissen können wo schluss ist
 
Hier ist deine ganze Code der MainActivity:

int geschwindigkeit = 10;
float x;
float y;
float z;
float MaxX;

Sensor sensor;
SensorManager sensorManager;
Handler handler;
LinearLayout container;
int Px = 550;
int Py = 1500;
ImageView player;
int pixels;


@override
protected void onCreate(Bundle savedInstanceState)
{

super.onCreate(savedInstanceState);
setContentView(R.layout.main);
container = (LinearLayout)this.findViewById(R.id.container);
player = (ImageView)this.findViewById(R.id.img);
move();
handler = new Handler();
handler.postDelayed(moveRunnable, 5);



sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

}


private void move(){
player.setX(Px);
player.setY(Py);
container.invalidate();
}
Runnable moveRunnable = new Runnable() {

@override
public void run()
{
if(Px >= 0){
if(x >= 1){
Px -= geschwindigkeit;
}else if(x <=-1){
Px += geschwindigkeit;
}
//Anti nicht bewegbar

if(Px == 10){
Px += 10;
}
}


handler = new Handler();
handler.postDelayed(moveRunnable, 50);
move();

}
};



public void onResume() {
super.onResume();
sensorManager.registerListener(accelListener, sensor,
SensorManager.SENSOR_DELAY_GAME);
}

public void onStop() {
super.onStop();
sensorManager.unregisterListener(accelListener);
}

SensorEventListener accelListener = new SensorEventListener() {
public void onAccuracyChanged(Sensor sensor, int acc) { }

public void onSensorChanged(SensorEvent event) {
x = event.values[0];
y = event.values[1];
z = event.values[2];
}
};
}
 
Ich bleibe bei meinen zwei Aussagen von oben und wo fragst du die Dimensions ab ?
 
Wie geht das und wofür ist das gut
 
Na du musst doch wissen , wo deine horizontale X Begrenzung des Bildschirmes ist , dazu musst du dir die breite des Bildschirmes ermitteln ..

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

Wenn du schon deine Animation "Zu fuss" machst, dann musst du das Ganze auch in einen Thread setzen
Android background processing with Handlers, AsyncTask and Loaders - Tutorial

Du bekommst so Performance Probleme

Ansonsten würde ich eher zu einer Animation anraten
Adding Animations | Android Developers
 
  • Danke
Reaktionen: DerEntwickler
Danke, probiere ich gleich aus
[doublepost=1483786212,1483784125][/doublepost]Das mit dem extra Thread klappt bei mir nicht.
Wie kann ich das Runnable noch einmal im Runnable selbst aufrufen über den Thread?
 
Das mit dem extra Thread klappt bei mir nicht.
Wie kann ich das Runnable noch einmal im Runnable selbst aufrufen über den Thread?

Wieso soll das nicht klappen ?
Threads sind eigentlich das A & O der Android Programmierung ...

Ein Runnable innerhalb eines Runnable ist nicht möglich
 
Aber wie soll ich die Bewegung dann regelmäßig aufrufen?
 
a) Du bastelst dir einen vernünfigen Thread.
b) Darin fragst du deine Sensoren ab und bewegst dein View

P.S Kann es sein , dass du noch recht neu in der Programmierung bist ?
Ich habe eben das Gefühl , dass Dir Grundlagen fehlen , ist das Richtig ?
 
Danke aber die meisten Grundlagen kenne ich schon.
Mit Thread und Bildschirm Koordinaten komme ich noch nicht so gut zurecht.
 

Ähnliche Themen

R
Antworten
9
Aufrufe
730
koje71
koje71
D
Antworten
3
Aufrufe
447
jogimuc
J
Temucin
Antworten
1
Aufrufe
533
jogimuc
J
Zurück
Oben Unten