1

Ich versuche, eine Camera App in Android zu schreiben. Ich wollte eine SeekBar zum Vergrößern/Verkleinern der Kamera verwenden. Hier geht mein Layout:Android SeekBar nicht kontinuierlich weiter

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     > 
     <FrameLayout 
      android:id="@+id/camera_preview" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      /> 

     <SeekBar android:id="@+id/sliderZoom" 
      android:layout_width="160dp" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_gravity="center" 
      /> 
    </LinearLayout> 


    <RelativeLayout 
     android:orientation="vertical" 
     android:layout_width="50dp" 
     android:layout_height="fill_parent" 
     android:background="#000000"> 

     <ImageButton 
      android:layout_height="50dp" 
      android:layout_width="wrap_content" 
      android:src="@drawable/flash" 
      android:scaleType="fitXY" 
      android:layout_alignParentTop="true" 
      android:onClick="onFlashClick" /> 
     <ImageButton 
      android:layout_height="50dp" 
      android:layout_width="wrap_content" 
      android:src="@drawable/zoom" 
      android:scaleType="fitXY" 
      android:layout_centerInParent="true" 
      android:onClick="onZoomClick" /> 
    </RelativeLayout> 
</LinearLayout> 

Wenn ich entweder der ImageButton, mein SeekBar bewegt sich sanft zu entfernen. Aber es bewegt sich nicht reibungslos, wenn ich beide ImageButton habe. Ich habe versucht, die App sowohl in portrait und landscape Modus zu betreiben. Das Problem bleibt in beiden Modi gleich.

Wie kann ich es lösen?

EDIT: Wie pro gewissen Kommentar, ich fühle mich ein paar mehr Informationen hinzuzufügen. Momentan gibt es keinen Event-Handler für die SeekBar. Die Kamera wird nicht vergrößert oder verkleinert. Es ist nur eine einfache SeekBar 'mit maximalen Wert auf eine beliebige ganze Zahl gesetzt. Für meinen Fall habe ich 5 bis 500 probiert. In jedem Fall habe ich das Problem. Durch sanfte Bewegung meine ich, wenn ich versuche, es mit der Berührung zu schieben, sollte es sich leicht bewegen, sollte nicht anhalten. Wenn es einen ImageButton gibt, kann ich den SeekBar Zeiger nach links/rechts ohne Problem schieben. Aber wenn es zwei ImageButton gibt, bewegt sich der Zeiger nicht so leicht. Es sieht so aus, als würde jedes Mal, wenn der Zeiger um eine Einheit verschoben wird, ein zeitraubender Vorgang im UI-Thread ausgeführt, der die UI daran hindert, Berührungsereignisse zu erfassen. Obwohl es keine zeitaufwändige Operation im UI-Thread gibt. Es gibt keine einzige für irgendeine Art von Berechnung geschriebene Funktion. Ich habe nicht einmal die Kameravorschau in der FrameLayout hinzugefügt oder die Kamera ist nicht initialisiert

Mehr Edit: Ich habe gerade eine interessante Wendung des Ereignisses gefunden. Wenn die Bildquelle für beide ImageButton dasselbe Bild (egal welches) ist, dann funktioniert es perfekt. Aber wenn ich zwei verschiedene Bilder für zwei ImageButton habe, dann fängt es an, das Problem zu verursachen. Ich hoffe, dass diese neuen Informationen helfen werden, eine Vorstellung davon zu bekommen, was passiert. Die Auflösung der Bilder beträgt 1299 x 1299 und weniger als 40 KB.

+0

Was meinst du mit 'move smooth'? Auch wann erwarten Sie eine sanfte Bewegung? Wenn es durch Berührung bewegt wird oder wenn Sie die Zoomstufe manuell einstellen? Außerdem sollten Sie Ihren Java-Code angeben. – leoderprofi

+0

Ich habe meine Frage mit einigen weiteren Details entsprechend Ihrer Frage bearbeitet. – user1120675

+0

Ich habe das von Ihnen angegebene Layout mit zwei Bildern der richtigen Größe ausprobiert und konnte das Problem nicht replizieren. Scheint als ob es in deinem Code ist. – leoderprofi

Antwort

0

Eigentlich ist das kein Problem. Kamera-Zoom-Level ist nicht so viel. Grundsätzlich Zoom-Level ist 5-7. So, wie Sie SeekBar als Ihr Zoom-Controller verwendet haben, bedeutet dies, dass der Maximalpegel Ihrer Suchleiste 7 ist (vorausgesetzt). Aus diesem Grund puffern Sie pro Level, wenn Sie die Leiste ziehen. Für Ihren Test können Sie den Wert seekBar.setMax (30) setzen und dann Ihre Suchleiste ziehen. Ich hoffe, Sie werden das glatte bekommen

+0

Sie ignorieren die Tatsache, dass ich sagte, es bewegt sich reibungslos, wenn ich einen der ImageButton entfernen. Es ist also nicht so, dass die Zoomstufe 5-7 beträgt, da sie sich bei gleicher Zoomstufe gleichmäßig bewegt, wenn nur eine Taste vorhanden ist. Um mich sicher zu machen, setze ich den Maximalwert 500 für SeekBar. Trotzdem hat es das gleiche Problem. – user1120675