2010-05-09 9 views
7

Ich habe meine eigene benutzerdefinierte Ansicht gerollt und kann auf den Bildschirm in Ordnung, aber was ich wirklich gerne tun möchte, ist die gemesseneHigh auf dem Bildschirm, sagen wir, 1000px und lassen Sie die Benutzer scrollen auf der Y-Achse, aber ich habe Probleme damit. Kann jemand helfen?Android: eine scrollbare benutzerdefinierte Ansicht machen

Hier einige Code:

public class TestScreen extends Activity { 
    CustomDrawableView mCustomDrawableView; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
     mCustomDrawableView = new CustomDrawableView(this); 
     setContentView(mCustomDrawableView); 
    } 
} 

und

public class CustomDrawableView extends View { 

    public CustomDrawableView(Context context) { 
     super(context); 
     setVerticalScrollBarEnabled(true); 
     setMinimumHeight(1000); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.drawLine(...); 
     // more drawing 
    } 
} 

Ich habe versucht scrollTo, scrollBy, awakenScrollBars usw. mit einem Aufruf von super, aber ohne Erfolg außer Kraft zu setzen. Fehle ich etwas Dummes, oder mache ich einen grundlegenden Fehler?

Vielen Dank im Voraus,

Martyn

Zusatz:

Ich habe versucht, dies als eine benutzerdefinierte Komponente mit der unter Layout-Datei hinzufügen und ändern Sie den Code in TestScreen auf die Punkt korrekte Ressource mit setContentView(R.layout.exampleLayout), aber dies verursacht den Absturz des Emulators. Ich habe versucht, den Code unten auf das absolute Minimum zu kommentieren und stürzt nach wie vor, so dass es etwas grundlegend falsch, dass ich tue, aber ich bin nicht sicher, was es ist:

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
     <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent"> 
      <com.martyn.testApp.CustomDrawableView 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
      /> 
     </ScrollView> 
</LinearLayout> 

Antwort

15

Setzen Sie einfach Ihre Ansicht in einem Scrollview!

Beachten Sie, dass die ScrollWiew der Wurzelknoten sein sollte (hier ist es Ihre Linearlayout)

+0

Dies war die Methode, die ich schließlich nahm. Ich habe ein LinearLayout als Basisknoten in der Layout-XML, dann eine Scrollview mit meiner benutzerdefinierten Ansicht innerhalb von – Martyn

+1

@Moons Ich habe ein lineares Layout innerhalb meiner Bildlaufansicht, aber wenn ich eine Bildansicht hinzufügen, erscheint es in der Bildlauf aber wenn ich füge meine eigene Ansicht hinzu, tut es nicht..aber es zeigt, wenn ich meine Ansicht als die Inhaltsansicht meiner Aktivität setze, zeigt es nur meine Ansicht an ... so dass das funktioniert ... dann funktioniert es nicht eine Bildlaufansicht? – rahul

6

Wenn Sie die gesamte Aktivität fehlen ein Scroll zu sein, dann so etwas tun:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/android:list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <LinearLayout android:id="@+id/scrollBody" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TextView android:id="@+id/textView1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/string1" /> 

    <TextView android:id="@+id/textView1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/string2" /> 

    </LinearLayout> 

</ScrollView> 

Dann die Aktivität, die dieses Layout verwendet, kann wie folgt aussehen:

public class ScrollingActivity extends Activity 
{ 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     this.setContentView(R.layout.scroll_layout); 
    } 
} 

Dies setzt voraus, dass der Name der xML-Datei scroll_layout.xml ist.

2

Wenn Sie selbst scrollen möchten, können Sie eine Scroller und eine VelocityTracker verwenden, während Sie die onTouchEvent Methode Ihrer benutzerdefinierten Ansicht überschreiben. Um Ihnen zu helfen, es zu implementieren, empfehle ich, durch die Javadocs dieser Klassen zu schauen und einen Blick auf Android Widgets Implementierungen, die Scrollen wie die NumberPicker.

Verwandte Themen