Das ist ja genau mein Problem. Es scheint nur vergrossernd zu skalieren und nicht verkleinernd. Also muss man die Bilder genau in der minimalen Auflösung die man haben möchte erstellen, bzw wenn Text enthalten ist genau in der Auflösung die man braucht.
Beiträge von Gutelo
-
-
Hallo,
ich versuche mit 9-patch images einen background fuer ein TextView zu erstellen. Mir ist das mit der Aufloesung von Bildern noch nicht ganz klar. Wie haengt die Aufloesung der in Android angezeigten Bilder mit der Aufloesung der Bilder in den Resources zusammen?
Angenommen ich habe ein 9-patch Bild erstellt mit der Aufloesung von 200x50 pixeln. Rechnet Android das in dip Einheiten um? Woher weiss ich wie gross ich die Bilder in den Resources machen muss?
Gutelo
-
Moment, es scheint etwas klick zu machen.
Ich muss dem SetPositiveButton anstatt ClickLoad den ODListener uebergeben, richtig? Und dann den Code aus ClickLoad in ODListener packen...
Edit: hmm, setPositiveButton nimmt ODListener nicht
Edit2: Ich kann setPositiveButton ganz wegnehmen, dann erhalte ich den fileName in ODListener, nur wie kann ich den Button dann umbenennen? Muss ich wohl im resource machen
-
Also irgendwie kapier ich das immer noch nicht.
Das Verlagern des Codes bringt nichts. Er muss doch auch so schonmal etwas im TextView anzeigen. Ich habe den Inhalt vom OnClickListener in ODListener verlegt, keinerlei aktion ...
Oder meinst du inklusive dem gesamten
public void onClick(DialogInterface dialog, int which)
{ ...}???
-
Das habe ich natuerlich in endsWith umgeaendert
Nein es ist mir nicht klar warum ich mit setPositiveButton den Interface code "totlege".
OpenDialogListener und OnClickListener sollten doch unterschiedliche Eventhandler sein oder nicht? Oder meinst du dass der Button click wieder ein deselect des items bewirkt? In dem Fall muesste aber der Filename schon im TextView gelandet sein als ich das item ausgewaehlt habe oder nicht?aus dem OpenDialogListener will ich den Filenamen bekommen, mit dem OnClickListener will ich den Filenamen verarbeiten ...
-
Hier ist die ganze Sequenz fuer OpenFileDialog:
Java
Alles anzeigenOpenFileDialog myFileDialog = new OpenFileDialog(getActivity()); myFileDialog.setFilter(".BDF"); myFileDialog.setTitle("Oeffne Bendich Datei"); OpenDialogListener ODListener = new OpenDialogListener() { public void OnSelectedFile(String fileName) { myFile = fileName; TextView Msg = (TextView) RV.findViewById(R.id.tv_msg); Msg.setText(fileName); } }; myFileDialog.setOpenDialogListener(ODListener); // "Abbrechen" Button OnClickListener ClickCancel = new OnClickListener() { public void onClick(DialogInterface dialog, int which) {} }; myFileDialog.setNegativeButton("Abbrechen", ClickCancel); // "Lade Datei" Button OnClickListener ClickLoad = new OnClickListener() { public void onClick(DialogInterface dialog, int which) { //if (myFile.compareTo("") != 0) //{ // Load data from file, plot it to XYPlot, and fill spinner SMotor = new StepMotor(RV,getActivity().getApplicationContext()); SMotor.LoadFileIntoRecord(Environment.getExternalStorageDirectory().getPath() + "/Books/Klaus.BDF"); // (myFile); Spinner Spnr = (Spinner) RV.findViewById(R.id.spinner); SMotor.AddMotorDataToSpinner(Spnr,getActivity().getBaseContext()); //} } }; myFileDialog.setPositiveButton("Datei laden", ClickLoad); myFileDialog.show();
Wieso formatiert der das hier immer so schrecklich?
-
Der OpenDialogListener wird anscheinend garnicht ausgefuehrt. Im R.id.tv_msg steht zunaechst "Medium Text". Dieser Eintrag wird beim click auf das File im Openfiledialog nicht geaendert. Der OpendialogListener sieht jetzt so aus:
-
Hallo,
ich moechte ueber usb mit einem Arduino Micro kommunizieren. Hierzu habe ich folgende Komponente gefunden:
https://code.google.com/p/usb-serial-for-android/Der Beispiel Code,
Java
Alles anzeigen// Get UsbManager from Android. UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); // Find the first available driver. UsbSerialDriver driver = UsbSerialProber.acquire(manager); if (driver != null) { driver.open(); try { driver.setBaudRate(115200); byte buffer[] = new byte[16]; int numBytesRead = driver.read(buffer, 1000); Log.d(TAG, "Read " + numBytesRead + " bytes."); } catch (IOException e) { // Deal with error. } finally { driver.close(); } }
kompiliert zwar, aber er findet den richtigen Treiber nicht. Verwendet sonst noch jemand dieses Paket und hat ein paar Tipps? Das Arduino Micro Programm habe ich so kompiliert, dass er kein device fuer das Keyboard erzeugt.
Gutelo
-
And.dev
Ich habe innerhalb des listeners den String fileName auf eineEm textview anzeigen lassen und da steht kein Dateiname oder Pfad drin obwohl ich ein item ausgewählt habe.
Gutelo
-
-
Danke and.dev
ich bin blind. Habe den Code mehrere Stunden durchgeschaut aber
public interface OpenDialogListener {
public void OnSelectedFile(String fileName);
}hab ich nicht gesehen. Wollte schon ein Feld Filename einfuegen...
Ich habe es jetzt so umgesetzt:
JavaOpenDialogListener ODListener = new OpenDialogListener(){ public void OnSelectedFile(String fileName) { String myFile = fileName; } };
Leider ist der String myFile ausserhalb dieser Anweisung nicht greifbar?!
Weisst du zufaellig auch warum setFilter(".txt") nicht funktioniert? Was fuer eine Formatierung des Strings erwartet diese Methode? Nur "txt" filtert auch alles weg.
Gutelo
-
Wunderbar die Aenderung im Manifest, bewirkt genau das richtige *freu*.
Kann man auch irgendwie bewirken, dass beim Wechsel der Fragments der Inhalt der nicht mehr sichtbaren Fragments erhalten bleibt, so dass man zurueckwechseln kann? Wahrschneinlich nicht weil er beim Wechsel ja neue Objekte erzeugen muss, richtig?
Gutelo
-
Aus einem Vergleich mit AlertDialog Beispielen habe ich inzwischen herausgefunden, dass es:
OpenFileDialog myFileDialog = new OpenFileDialog(getActivity());
heissen muss! Dann zeigt er den Dialog auch an. Warum es einen Typ Context erwartet, aber mit getActivity funktioniert ist mir schleierhaft.
Edit: Oh, ich kann den Dialog anzeigen lassen, ich kann Datei auswaehlen, ich kann den Ok button event abfangen, ABER : ich komme nicht an den Pfad
-
Inzwischen habe ich herausgefunden, dass DialogInterface.OnClickListener()
ein Interface ist. Deshalb nehme ich an, dass
public void onClick(DialogInterface dialog, int which);
eine Methode aus diesem Interface ist, die nun implementiert wird. Aber dass man das einfach so hinter den Parameter schreibt ist mir immer noch nicht klar.
-
Hallo,
ich wuerde gerne wissen was das fuer eine merkwuerdige Konstruktion ist, die haeufig bei eventhandlern auftritt.
JavaalertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Toast.makeText(getActivity().getApplicationContext(), "You clicked on OK", Toast.LENGTH_SHORT).show(); } });
alertDialog ist das Obkjekt. setPositiveButton ist eine Methode von alertDialog. Dann folgen die beiden Parameter "Ok" und new DialogInterface.OnClickListener(). Was ich nicht verstehe ist, dass an den zweiten Parameter eine Anweisung angehaengt wird, die ebenfalls eine Methode definiert.
Wieso kann man den Anweisungsblock einfach dort einfuegen? Wie haengt der Anweisungsblock zusammen mit dem Rest? Gibt es vielleicht einen aequivalenten Ausdruck fuer das Konstrukt, so dass ich verstehe was es eigentlich macht?
Gutelo
-
Aber wie oder welches View muss ich verwenden?
ich habe auch schon ein neues View mittels View myView = new View(context) erstellt. Dann schmiert das Programm ebenfalls ab.
Fehlermeldung mit RV als view:
09-17 18:36:13.805: E/AndroidRuntime(23803): FATAL EXCEPTION: main
09-17 18:36:13.805: E/AndroidRuntime(23803): Process: info.androidhive.slidingmenu, PID: 23803
09-17 18:36:13.805: E/AndroidRuntime(23803): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
09-17 18:36:13.805: E/AndroidRuntime(23803): at android.view.ViewGroup.addViewInner(ViewGroup.java:3562)
09-17 18:36:13.805: E/AndroidRuntime(23803): at android.view.ViewGroup.addView(ViewGroup.java:3415)
09-17 18:36:13.805: E/AndroidRuntime(23803): at android.view.ViewGroup.addView(ViewGroup.java:3391)
09-17 18:36:13.805: E/AndroidRuntime(23803): at com.android.internal.app.AlertController.setupView(AlertController.java:413)
09-17 18:36:13.805: E/AndroidRuntime(23803): at com.android.internal.app.AlertController.installContent(AlertController.java:241)
09-17 18:36:13.805: E/AndroidRuntime(23803): at android.app.AlertDialog.onCreate(AlertDialog.java:337)
09-17 18:36:13.805: E/AndroidRuntime(23803): at android.app.Dialog.dispatchOnCreate(Dialog.java:361)
09-17 18:36:13.805: E/AndroidRuntime(23803): at android.app.Dialog.show(Dialog.java:262)
09-17 18:36:13.805: E/AndroidRuntime(23803): at android.app.AlertDialog$Builder.show(AlertDialog.java:951)
09-17 18:36:13.805: E/AndroidRuntime(23803): at info.androidhive.slidingmenu.openfiledialog.OpenFileDialog.show(OpenFileDialog.java:115)
09-17 18:36:13.805: E/AndroidRuntime(23803): at info.androidhive.slidingmenu.GraphFragment$1.onClick(GraphFragment.java:70)
09-17 18:36:13.805: E/AndroidRuntime(23803): at android.view.View.performClick(View.java:4438)
09-17 18:36:13.805: E/AndroidRuntime(23803): at android.view.View$PerformClick.run(View.java:18422)
09-17 18:36:13.805: E/AndroidRuntime(23803): at android.os.Handler.handleCallback(Handler.java:733)
09-17 18:36:13.805: E/AndroidRuntime(23803): at android.os.Handler.dispatchMessage(Handler.java:95)
09-17 18:36:13.805: E/AndroidRuntime(23803): at android.os.Looper.loop(Looper.java:136)
09-17 18:36:13.805: E/AndroidRuntime(23803): at android.app.ActivityThread.main(ActivityThread.java:5001)
09-17 18:36:13.805: E/AndroidRuntime(23803): at java.lang.reflect.Method.invokeNative(Native Method)
09-17 18:36:13.805: E/AndroidRuntime(23803): at java.lang.reflect.Method.invoke(Method.java:515)
09-17 18:36:13.805: E/AndroidRuntime(23803): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
09-17 18:36:13.805: E/AndroidRuntime(23803): at dalvik.system.NativeStart.main(Native Method) -
Hallo,
ich brauechte etwas Hilfe um diesen OpenFileDialog zum Laufen zu bringen: https://github.com/Sash0k/Andr…aster/OpenFileDialog.java
Ich habe in meinem Projekt ein package erstellt und die Datei dem Package hinzugefuegt. Danach habe ich versucht einen OpenFileDialog zu erstellen. Leider gibt es dazu kein Tutorial wie ich diese Klasse einsetzen muss. Im moment mache ich folgendes in meinem Fragment:
JavaOpenFileDialog myFileDialog = new OpenFileDialog(getActivity().getApplicationContext()); myFileDialog.setFilter("*.BDF"); myFileDialog.setTitle("Oeffne Datei"); myFileDialog.setView(RV); // RV ist view des Fragments myFileDialog.create(); myFileDialog.show();
1.) ich bin mir nicht sicher was create() macht und ob man das selber ausfuehren muss
2.) ich weiss dass ein onClickListener implementiert werden muss, aber nicht wie
3.) das Program stuerzt bei myFileDialog.show() ab. Anscheinend fehlt etwas bei der initialisierung, oder irgendwas ist falschWenn jemand ein Minimalbeispiel hat oder bezueglich dieser Klasse im Internet kennt waere ich dankbar
Gutelo
-
Hallo Marco,
Danke fuer die Antworten. Bezueglich Punkt [4] habe ich noch Fragen:
1) Bei deiner Methode 1: Muss das zwingend in das OnCreate des Main-activity oder geht auch das OnCreateView des Fragments? Muss ich dort alles was gemacht wird (d.h. in meinem Fall Einlesen der Daten und Plotten der Daten) einmal in dem if-Zweig und einmal in dem else-Zweig packen? Anders gesagt, zweigt das auf in das was ohne Drehung, und das was nach einer Drehung gemacht wird?
2) Bei der Methode 2: Hierbei verstehe ich nicht ganz welche UI gemeint ist. Ich habe eine Main_Activity und drei Fragments. Ich nehme an dass die Main_activity eine UI hat, die mein Sliding Menue enthaelt. Haben die Fragments jeweils eigene UIs? Woher bekomme ich den namen der UI den ich hier eintragen muss?:
<activity android:configChanges="screenSize|orientation"
android:name="…Gutelo
-
Hallo,
ich habe Fragen bezueglich objektorientierter Programmierung und ob ich es im Prinzip richtig gemacht habe oder was man anders machen sollte.
Ausgangspunkt: ich habe ein sliding menu tutorial als Ausgangspunkt. Dieses hat eine main_activity und drei fragments. Hier geht es um eines der Fragments (in Graph_Fragment.java). Graph_Fragment enhaelt einen Button und eine Komponente XYPlot androidplot
Nun habe ich eine weitere Klasse (myClass) definiert die folgendes macht: Sie laedt ein Textfile, parst dieses Textfile und schreibt die herausgefilterten numerischen Werte in eine Referenzklasse (myData, aehnlich einem record). Anschliessend enthaelt myData die Werte fuer mehrere XY-Kurven.
MyClass ist folgendermassen aufgebaut:
Code
Alles anzeigenpublic class MyClass { private View myView; // stores view from Fragment private XYPlot myPlot; // stores plot from Fragment private TData myData; // stores data private Context myContext; // stores context from Fragment // constructor public MyClass(View MC_View, XYPlot MC_Plot, Context MC_Context) { myView = MC_View; myPlot = MC_Plot; myContext = MC_Context; } // loads text-file into myData public void LoadFileIntoRecord(String FileName) // determines if char is a digit private boolean IsDigit(char ch); // searches next occurrence of string <key> in file after <startpos> private long SeekNext(RandomAccessFile fis, long startpos, String key); // searches next occurrence of string <key> in file after <startpos> and returns first value after private float ReadNextValue(RandomAccessFile fis, long startpos, String key) // determines if there is a next valid block marked with "$BEGIN" ... "$END" private boolean DetermineNextValidBlock(RandomAccessFile fis, long startpos, TNextValidBlock NVB) // extracts all data in the blocks and fills myData private void ExtractMotorDataFromStream(RandomAccessFile fis, TMotorData MD) // performs statistic operations on myData; saves statistical data also in myData private void MakeMotorDataStatistics(TMotorData MD) // plots the data in myData to XYPlot public void PlotMotorData(int NCurve) }
Meine Fragen:
1) ist es in Ordnung myPlot, myView und myContext so ueber den Konstruktor von dem Fragment in die Klasse myClass zu bringen?
2) die private Funktionen zum parsen scheinen mir OO-maessig okay zu sein. Sie opererieren ja nur innerhalb der Klasse auf myData, das zuvor eingeladen wurde. Ein schlechteres Gefuehl habe ich bei PlotMotorData(int NCurve) welches die n-te Kurve aus myData in myPlot zeichnet. Ist es okay auch diese Plotoperation so in der Klasse zu haben, dass sie vom Fragment aus z.B. via myClassObject.PlotMotorData(2) aufgerufen wird? Dies ist ja irgendwie objektuebergreifend.
3) Viele der Parse Methoden enthalten Zugriffe auf das File mittels RandomAccessFile. Theoretisch muesste ich doch bei diesen Methoden ein "throws ExceptionXYZ" hinter der Methoden-deklaration stellen, oder nicht? So wie ich das verstanden habe muessen Methoden in denen exceptions auftreten koennen diese auch weiterreichen.
Vielen Dank
Gutelo
Edit: eine weitere Frage. Ist es normal, dass das Fragment Objekt komplett neu geladen wird wenn der screen seine Orientierung von horizontal nach vertikal und umgekehrt aendert?
-
Das Programm ist schon fertig unter Lazarus. Terminal-Programm das über serielle Schnittstelle einen Arduino Mikroprozessor steuert. Dieser nimmt auf einem analogen input channel Spannungswerte auf die über einem Widerstand abfallen wenn ein Motor fährt. Der Strom ist proportional zur Spannung. Die strom-zeit Kurven werden geplottet. Abhängig vom Verlauf werden dann bestimmte Werte ins Eeprom des arduino gespeichert um z.b. im Anschlag den Motor abzuschalten. Das lazarus Programm war schnell fertig, aber das ganze auf Android umzusetzen ist schwer. Immerhin kann ich jetzt schon die datenfiles einlesen lassen. Er parst die strom-zeit Daten und er zeigt die Kurven im androidplot an. Nun hänge ich am file open Dialog. Danach kommt die Kommunikation über USB2Serial. Für letzteres habe ich eine Komponente gefunden.
Jetzt weist du was ich mache