Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

1

03.08.2013, 20:57

Wischgesten Android Java - Umsetzungsschwierigkeiten

Hallo Community,

ich versuche gerade mit dem "AndroidStudio" eine App zu erstellen, die sich mit Wischgesten steuern lässt.
Ich habe das folgendes Codeschnippsel gefunden:
http://www.eridem.net/android-tip-010-le…-gesture-events


"AndroidStudio" beklagt aber folgendes:
  • Quellcode

    1
    
     private class SwipeGestureDetector
Fehlermeldung: "Modifier 'private' not allowed here"
  • YourActivity.this.onRightSwipe();
Funktioniert nicht. Meine Activity heißt "lesefenster".
Fehlermeldung bei "lesefenster.this.onRightSwipe();": "....lesefenster is not an enclosing class"

Hat jemand eine Idee, wie man dieses Codeschnippsel richtig verwenden kann, oder ist es ein Bug von AndroidStudio?

Schönes Wochenende noch,
MitgliedXYZ

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

2

04.08.2013, 09:29

Fehlermeldung: "Modifier 'private' not allowed here"

Dann weg mit dem 'private'!? Oder meinst du irgendwas anderes?

killmichnich

unregistriert

3

04.08.2013, 10:27

Also ich hab den Code mal kopiert und bei mir (eclipse) eingefügt. Keine Fehlermeldung, außer der Warnung 'The constructor GestureDetector(GestureDetector.OnGestureListener) is deprecated'.
Also würde ich fast vermuten, der Fehlerliegt nicht am Code?

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

4

04.08.2013, 10:44

Fehlermeldung: "Modifier 'private' not allowed here"

Dann weg mit dem 'private'!? Oder meinst du irgendwas anderes?
Ja, das wäre auch meine Lösungsidee. Was der größere Fehler war:
"....lesefenster is not an enclosing class"

Was bedeutet das? Wenn es wirklich nur an AndroidStudio liegt, wie kann ich dann dieses Problem übergehen? Hat jemand eine Idee?


Ist es ein Problem, dass beide Klassen sich in der selben Codedatei befinden? Normalerweise sollte das doch aber problemlos gehen.


Edit: Hier mal die komplette Codedatei:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package com.example2.myapplication;


import android.os.Bundle;

import android.app.Activity;

import android.util.Log;

import android.view.GestureDetector;

import android.view.Menu;

import android.view.MotionEvent;

import android.widget.Toast;


public class lesefenster extends Activity {


    private GestureDetector gestureDetector;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.test);


        gestureDetector = new GestureDetector(new SwipeGestureDetector());

    }

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.lesefenster, menu);

        return true;

    }

    @Override

    public boolean onTouchEvent(MotionEvent event) {

        if (gestureDetector.onTouchEvent(event)) {

            return true;

        }        return super.onTouchEvent(event);

    }
    public void onLeftSwipe() {


    }
    public void onRightSwipe() {

        // Do something    }

}
// Private class for gestures

//Quelle: http://www.eridem.net/android-tip-010-left-and-right-swipe-gesture-events

 class SwipeGestureDetector

        extends GestureDetector.SimpleOnGestureListener {

    // Swipe properties, you can change it to make the swipe    // longer or shorter and speed    private static final int SWIPE_MIN_DISTANCE = 120;

    private static final int SWIPE_MAX_OFF_PATH = 200;

    private static final int SWIPE_THRESHOLD_VELOCITY = 200;


    @Override

    public boolean onFling(MotionEvent e1, MotionEvent e2,

                           float velocityX, float velocityY) {

        try {

            float diffAbs = Math.abs(e1.getY() - e2.getY());

            float diff = e1.getX() - e2.getX();


            if (diffAbs > SWIPE_MAX_OFF_PATH)

                return false;


            // Left swipe

            if (diff > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {

                lesefenster.this.onLeftSwipe();

                // Right swipe

            } else if (-diff > SWIPE_MIN_DISTANCE

                    && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {

                lesefenster.this.onRightSwipe();

            }        } catch (Exception e) {

            Log.e("YourActivity", "Error on gestures");

        }        return false;

    }}


Auch wenn man für die Klasse eine neue Codedatei erstellt, verbessert sich nichts :/

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »MitgliedXYZ« (04.08.2013, 11:07)


5

04.08.2013, 13:22

Quellcode

1
lesefenster.this.onLeftSwipe();

Das irritiert mich. lesefenster hat keine statischen Variablen/Methoden. Du brauchst also wahrscheinlich eine Instanz.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

Tobiking

1x Rätselkönig

  • Private Nachricht senden

6

04.08.2013, 13:51

Das Beispiel zeigt keine 2 Klassen in einer Datei, sondern eine Klasse und eine innere Klasse. Das Abschließen der Klasse in Zeile 69 ist daher Mist.

7

04.08.2013, 18:42

"....lesefenster is not an enclosing class"

Das bedeutet, dass deine "lesefenster"-Klasse von keiner anderen umschlossen wird.
Es macht keinen Sinn, eine "Top-Level"-Klasse (d.h. ohne umgebende Klasse/Namespace) private zu machen.

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

8

04.08.2013, 20:50

"....lesefenster is not an enclosing class"

Das bedeutet, dass deine "lesefenster"-Klasse von keiner anderen umschlossen wird.
Es macht keinen Sinn, eine "Top-Level"-Klasse (d.h. ohne umgebende Klasse/Namespace) private zu machen.
Und das löst mein Problem. Danke.

War also nur eine falsch gesetzte Klammer. Ich hab nicht darauf geachtet, dass die Klasse in einer Klasse sein muss (und auch nicht gewusst, dass so etwas überhaupt möglich ist).

Werbeanzeige