View bewegen, solange Button gedrückt bleibt.

W

Wolflkoder

Neues Mitglied
1
Hallo Gemeinde,

Ich bin ein Neuling in Sachen Java und vor allem in OOP! Nun würde ich gerne ein kleines Projekt realisieren das im Kartext so aussieht, dass sich ein kleines Auto über den Bildschirm bewegt.


Mein Auto bewegt sich bereits, allerdings nur wenn ich den Button „vor“ drücke, loslasse und dann wieder erneut drücke!

dies habe ich so realisiert:
Code:
if (v == findViewById(R.id.vor) && (me.getAction() == MotionEvent.ACTION_DOWN)) {
            vor = vor + 5;
            spielbereich.removeAllViews();
            spielStarten("vor", 1);
          }

nun aber folgendes Problem:

ich möchte dass sich das Auto von selbst solange bewegt, wie ich den Button "vor" gedrückt halte.

mein Lösungsansatz bis hierher ist das ganze in einem anderen Thread zu starten und dort in einer while Schleife den Integer Wert hochzähle.

bis hierher kein Problem.

Allerdings muss ich ja bei jedem verändertem Wert, meine Funktion im Hauptthread "spielStarten" aufrufen um das Auto zu bewegen.

Und hier ist mein Problem.

Ich kann die Methode des Hauptthreads nicht aus dem Thread starten.
-- Can't creat handler inside thread that has not called Looper.prepare() ).

Nun hoffe ich auf einen für mich als Noob verständlichen Lösungsansatz.

Grüße

Wolflkoder
 
Zuletzt bearbeitet:
Hi, basierend hierauf hab ich mal ein Minimalbeispiel zusammengebastelt. Vielleicht hilft Dir das ja weiter.

Code:
package com.example.movecar;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {

    Button btnMove;
    ImageView imgView;

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

        imgView = (ImageView) findViewById(R.id.imgView);
        btnMove = (Button) findViewById(R.id.btnMove);
        btnMove.setOnTouchListener(new View.OnTouchListener() {

            private Handler mHandler;

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    if (mHandler != null) {
                        return true;
                    }
                    mHandler = new Handler();
                    mHandler.postDelayed(mAction, 10);
                    break;
                case MotionEvent.ACTION_UP:
                    if (mHandler == null) {
                        return true;
                    }
                    mHandler.removeCallbacks(mAction);
                    mHandler = null;
                    break;
                }
                return false;
            }

            Runnable mAction = new Runnable() {
                @Override
                public void run() {
                    mHandler.postDelayed(this, 10);
                    // change image view's x position
                    imgView.setX(imgView.getX() + 1.0f);
                }
            };
        });
    }
}

Code:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.movecar.MainActivity" >

    <Button
        android:id="@+id/btnMove"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="Move" />

    <ImageView
        android:id="@+id/imgView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/btnMove"
        android:layout_centerVertical="true"
        android:layout_marginLeft="22dp"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>
 
  • Danke
Reaktionen: Jaiel

Ähnliche Themen

E
Antworten
1
Aufrufe
2.262
markus.tullius
markus.tullius
E
Antworten
1
Aufrufe
3.285
Jaiel
Jaiel
H
  • Hendrix95
Antworten
1
Aufrufe
2.240
Hendrix95
H
Zurück
Oben Unten