Ist es möglich UI-Elemente mit dem NDK ? - das fehlen von Daten im Android-docs
Nach dem Lesen der zugehörigen docs habe ich nicht bekommen, wenn ich kann, Dinge zu schaffen wie Schaltflächen oder andere Elemente der Benutzeroberfläche verwendet, um Benutzer-Eingaben mit nur die Verwendung von C++/C code kompiliert mit dem NDK.
Gibt es keine Probleme, wenn ich damit umgehen will, das "Fenster" oder die Aktivität braucht, um zu bleiben im Fokus, aber ich verstehe nicht, wie man ein UI mit Elementen für Rückrufe und Benutzereingaben.
Es ist seltsam, dass es ist eine windowing-framework, aber ohne jede Spur von callbacks-UI-Elemente.
Kann ich bauen, touch-Tasten oder ein virtuelles gamepad mit dem NDK ?
Ich Schätze die Anstrengungen und die Tatsache, dass wir immer näher zu meinem Punkt aber anscheinend war ich nicht erklären, mich gut genug.
Fand ich dieses Bild hier
Nun mein problem und der Fokus auf diese Frage ist:
Meinte, ich kann den Ort und zeichnen Sie diese virtuelle joystick, wie ich erkennen kann nur die Bewegungen und eine callback-wie Joystick.onUp
oder Joystick.onDown
mit Android und nur mit den NDK ?
Wenn es keine Rückrufe von dieser Art verfügbar, vom NDK, ich soll zu erkennen, die [x,y] - position jedes mal, vergleichen Sie es mit der Lage von meinem joystick, speichern die Letzte position, vergleichen Sie die vorherigen position und der nächsten die Richtung zu bekommen ?
Da der sensor löst Ereignisse in einem wirklich schnellen Tempo, ich denke, dass dieses Gebäude auf meinem eigenen wenn nur die raw-X,Y-paar, wird am Ende in einer wirklich ineffizient control-system, weil es wird nicht optimiert werden, auf OS-Ebene mit den entsprechenden sensor-Aufrufe.
Entsprechend der NativeActivity Beispiel es ist auch unklar, wie, um mehrere Berührungspunkte, zum Beispiel, wie kann ich mit 2 touch-Ereignis zur gleichen Zeit ?
Betrachten Sie einfach das Bild oben und denken darüber nach, nur x -, y-Koordinate für die 1-touch-Punkt und wie kann ich dies lösen in ein effizient Weise, unterstützt durch das NDK.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicher, Sie können. Lesen Sie auf den Aufruf von Java aus C(++), und nennen Sie die jeweiligen Java-Funktionen - entweder den Aufbau von UI-Elementen (Layout, buttons, etc.) eins nach dem anderen, oder laden Sie eine XML-layout. Es gibt keine C-spezifischen Schnittstelle, aber die Java ist man da zu rufen.
Es sei denn, es ist ein Spiel und Sie wollen, um Ihre eigene Zeichnung über OpenGL ES. Ich bin mir nicht sicher, wenn Sie können mix and match.
In einem
NativeActivity
können Sie noch einen Zeiger auf den Java-Tätigkeit-Objekt und rufen Sie Ihre Methoden - es ist dieclazz
Mitglied derANativeActivity
Struktur übergeben Ihreandroid_main
als parameter, über dieandroid_app
Struktur. Nehmen, die Zeiger, nehmen Sie dieJNIEnv*
von der gleichen, und weisen Sie ein layout.Wie wird diese Interoperabilität mit OpenGL, ich bin mir nicht sicher.
EDIT: über die Zusammenstellung Ihrer eigenen input-Verarbeitung. Die Taste Rückruf
onInputEvent(struct android_app* app, AInputEvent* event)
innerhalbandroid_app
Struktur. Platzieren Sie Ihre Rückruf gibt, wird Android es nennen, wenn es angemessen ist. VerwendenAInputEvent_getType(event)
zum abrufen von Ereignis-Typ; touch-Ereignisse Typ AINPUT_EVENT_TYPE_MOTION.EDIT2: hier ist eine minimale native app packt die touch-Ereignisse:
Müssen Sie, natürlich, fügen Sie ein Projekt, um es, mit einem manifest, Android.mk und alles. Android.mk müssen die folgenden als die Letzte Zeile:
Den
native_app_glue
ist eine statische Bibliothek, die einige C-überbrückung für die APIs, die normalerweise konsumiert werden, die über Java.Können Sie tun es ohne Kleber Bibliothek als gut. Aber dann musst du eine eigene Funktion
ANativeActivity_onCreate
, und ein paar andere Rückrufe. Dieandroid_main
/android_app
combo ist eine Schnittstelle definiert, die von der glue-Bibliothek.EDIT: Für die touch-Koordinaten verwenden
AMotionEvent_getX/Y()
übergeben das event-Objekt als ersten parameter und der index den Zeiger, als die zweite. VerwendenAMotionEvent_getPointerCount()
zum abrufen der Anzahl von Zeigern (touch-points). Das ist deine native Verarbeitung von multitouch-events.Kurz gesagt, ja, das sind Sie. Es gibt keine builtin-Plattform-Unterstützung für virtuelle joysticks; Sie befassen sich mit Berührungen und koordiniert, und Sie übersetzen, dass in Ihrer app-UI-Metapher. Das ist so ziemlich die Essenz der Programmierung.
Nicht "jedesmal" wenn - nur wenn er sich verändert. Android ist ein event-driven system.
Nun, zu Ihrer "ich möchte, dass es auf OS-Ebene" Stimmung. Es ist FALSCH, auf vielen Ebenen. Zuerst das Betriebssystem nicht schulde dir nichts. Das OS ist, was es ist, nimm es oder lass es. Zweitens, die Unlust zu verlängern Aufwand (AKA faul) ist in der Regel verpönt in der software-community. Dritte, die OS code ist immer noch code. Bewegen etwas in das OS vielleicht gewinnen Sie einige Effizienz, aber warum glaubst du, es wird einen Benutzer wahrnehmbaren Unterschied? Es ist touch-Verarbeitung wir reden hier nicht gerade eine besonders CPU-intensive Aufgabe. Hast du eigentlich eine app erstellen, Profil und finden Sie die Leistung fehlt? Bis Sie tun, nicht immer erraten, wo der Flaschenhals wäre. Das Wort dafür ist "premature optimization", und es ist etwas, das jeder und Ihr Onkel die Katze Sie warnen gegen.
NativeActivity
. Die ehemalige kann und sollte die Verwendung von Android-layouts, die letzteren nicht. Entscheiden, welche Sie wollen. Ist es ein Spiel? Wenn nicht, dann ist wahrscheinlich die ehemalige. Ja, um den Anruf wieder in Java müssen Sie JNI. Auch SO ist nicht ein Diskussionsforum - wenn Sie weitere Fragen haben, Fragen Sie Sie, wenn neue Fragen.NativeActivity
ist NICHT das gleiche wie eine Reine C++ - Aktivität.NativeActivity
ist ein Modus der Verpackung native code, aber nicht die einzige.<ndk root>/samples/native-activity
: ich aufbauen kann, eine Benutzeroberfläche mit code wie diesem ?