Skocz do zawartości
PiotrekK

odczytywanie pozycji dotknięcia ekranu

    Rekomendowane odpowiedzi

    Witam,

    mam mały problem. Otóż chciałbym odczytać współrzędne, gdzie użytkownik dotknie palcem ekranu (w telefonach dotykowych).

    Oto moje wypociny:

    package com.example.helloandroid;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;
    import android.view.MotionEvent;
    
    public class HelloAndroid extends Activity {
      /** Called when the activity is first created. */
    float positionX;
    float positionY;
    /*public HelloAndroid(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	TextView tv = new TextView(this);
        tv.setText("X: " + positionX + ",Y: " + positionY);
        setContentView(tv);
    }
    */
    public void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	TextView tv = new TextView(this);
        tv.setText("X: " + positionX + ",Y: " + positionY);
        setContentView(tv);
    }
    public void onGameLoop() {
    
    }
    
    public void onTouchDown(float x, float y, MotionEvent event, int pointerCount, int pointerId)
    {
    	positionX = x;
    	positionY = y;
    }
    
    public void onTouchMove(float x, float y, MotionEvent event, int pointerCount, int pointerId)
    {
    
    }
    
    public void onTouchUp(float x, float y, MotionEvent event, int pointerCount, int pointerId)
    {
    
    }
    
    }

    zadaniem tego programiku jest wypisanie w którym miejscu użytkownik dotknął ekranu. Niestety za każdym razem wyswietla się:

    X: 0.0,Y: 0.0

    Co jest nie tak? Źle zrobiłem odczyt onTouch czy zromabłem wyświetlanie?

    Byłbym wdzięczny za pomoc :help: :help: :help:

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    piotrpo

    A co ma się wyświetlić - przecież tylko inicjujesz pola a nie robisz nic, żeby je zaktualizować po tapnięciu w ekran.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    wiem, próbowałem zrobić to wyświetlanie tekstu w innej funkcji ale nie na wiele to się zdało...

    Wiem że to strasznie głupie pytanie ale:

    czy ktoś zna jakiś lepszy sposób wyświetlanie tekstu?

    Ja mam taki:

    Programowanie na Androida: Lekcja 2. Android say: Hello World!

    no i nie działa ten sposób nigdzie indziej poza funkcją onCreate :wsciekly:

    Robię tak:

    void Aktualizujzmienne(Bundle icicle) {
    	setContentView(R.layout.main);
    	TextView t = (TextView)findViewById(R.id.hello);
    	t.setText("X: " + positionX + ",Y:" + positionY);
    }

    bez tego Bundle icicle w nawiasie nie działa (nie wyświetla się nic), a jak to dodam to znowu też nie działa. Sorry ale mimo przeczytaniu poradników i tak nie wiem co to jest to Bundle :oops:

    Byłbym bardzo wdzięczny za podanie sposobu na wyświetlanie tekstu w każdej funckji nie tylko w onCreate ;/

    PS: No chyba że sposób jest dobry tylko ja go nie rozumiem :zdziwko:

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    gzajac
    bez tego Bundle icicle w nawiasie nie działa (nie wyświetla się nic), a jak to dodam to znowu też nie działa. Sorry ale mimo przeczytaniu poradników i tak nie wiem co to jest to Bundle

    Wyglda na to że potrzebujesz najpierw solidnych podstaw programowania pod Androida - zacznij od przeczytania (ze zrozumieniem) tego The Developer's Guide | Android Developers i przerobieniu kilku tutoriali z tego linka Hello, World | Android Developers.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    A co ma się wyświetlić - przecież tylko inicjujesz pola a nie robisz nic, żeby je zaktualizować po tapnięciu w ekran.

    Nie za bardzo rozumiem... Co mam zrobić?

    Edytowane przez PiotrekK

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    piotrpo

    Wyciągasz jako pole klasy:

    private TextView tv;

    Zamiast uaktualniania zmiennych, wpisz w onTouchDown(...){

    tv.setText("X: " + positionX + ",Y: " + positionY);

    }

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jak się pewnie domyślacie mam problem :niepewny:

    Nie będę zakładać nowego tematu bo sprawa nie wymaga dużych objaśnień :rolleyes:

    Otóż po zagłębieniu się w tutoriale powoli moja mini-aplikacja jest coraz bardziej rozbudowana. :rotfl:

    Niestety nie omówiono w nich jednej rzeczy, mianowicie jak zmieniać położenie obrazka (Image View).

    Stworzony przeze mnie w XML'u ImageView jest w tej chwili w jednym miejscu - przy lewej krawędzi ekranu.

    Czy da się zrobić coś takiego, że "podaję obrazkowi" odpowiednie koordynaty a on wyświetla się we wskazanym miejscu? Czy w XML się tak za bardzo nie da?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    gzajac

    Da się-> AbsoluteLayout | Android Developers

    Jednak jest to rozwiązanie WYSOCE NIEZALECANE

    Wszystko da się osiągnąć za pomocą innych typów layoutów.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    ludzie jak nie macie zamiaru pomóc temu nieszczęśnikowi to nie marnujcie tekstu

    tu masz jak to powinno wyglądać jeżeli chcesz odczytać pozycje i rodzaj dotknięcia w obrębie R.id.layout

    ale sądzę ze to wiele tobie nie pomoże bo nie masz zielonego pojęcia o programowaniu obiektowym :facepalm:

    konstruktor Layout, /res/layout/main.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/layout">
    </LinearLayout>

    kod

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    LinearLayout Layout = (LinearLayout) findViewById(R.id.layout);
    Layout.setOnTouchListener(new View.OnTouchListener() {
    	public boolean onTouch(View arg0, MotionEvent move) {
    		switch (move.getAction()) {
    			case MotionEvent.ACTION_DOWN:
    				System.out.println("Down " + move.getX() + ", " + move.getY());
    				return true;
    			case MotionEvent.ACTION_MOVE:
    				System.out.println("Move " + move.getX() + ", " + move.getY());
    				return true;
    			case MotionEvent.ACTION_UP:
    				System.out.println("Up " + move.getX() + ", " + move.getY());
    				return true;
    			default:
    				return false;
    		}
    	}
    });
    }

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Da się-> AbsoluteLayout | Android Developers

    Jednak jest to rozwiązanie WYSOCE NIEZALECANE

    Wszystko da się osiągnąć za pomocą innych typów layoutów.

    No dzięki, ale z jakiego powodu jest to niezalecane i co mi w takim razie zalecasz?

    @UP poradziłem sobie wcześniej ale i tak dzieki :wstyd:

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x