2010-05-09 24 views
7

Ho arrotolato la mia vista personalizzata e posso disegnare sullo schermo, ma quello che mi piacerebbe davvero fare è impostare il peso misurato dello schermo su, per esempio, 1000px e lasciare che il l'utente scorre sull'asse Y, ma ho problemi a farlo. Qualcuno può aiutare?Android: creazione di una vista scorrevole scorrevole

Ecco po 'di codice:

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

e

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 
    } 
} 

Ho cercato di ignorare scrollTo, scrollBy, awakenScrollBars ecc con una chiamata a super, ma senza alcun risultato. Mi sto perdendo qualcosa di stupido o sto facendo un errore fondamentale?

Grazie in anticipo,

Martyn

Aggiunta:

ho cercato di aggiungere questo come un componente personalizzato con il file di layout di sotto e ha cambiato il codice in TestScreen per puntare al risorsa corretta con setContentView(R.layout.exampleLayout), ma questo causa l'arresto anomalo dell'emulatore. Ho provato commentando il codice fino al minimo indispensabile e si blocca ancora, quindi non c'è qualcosa di fondamentalmente sbagliato che sto facendo, ma non sono sicuro di quello che è:

<?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> 

risposta

15

Basta mettere la vostra vista in uno ScrollView!

Si noti che lo ScrollWiew dovrebbe essere il nodo principale (qui è il tuo LinearLayout)

+0

Questo era il metodo che ho preso alla fine. Ho un LinearLayout come nodo di base nel layout xml, quindi un ScrollView con la mia vista personalizzata contenuta all'interno di – Martyn

+1

@Moons Ho un layout lineare all'interno della mia vista di scorrimento, ma quando aggiungo una visualizzazione di immagine appare nello scroll ma quando aggiungi la mia vista personalizzata ad esso, non lo fa..ma lo fa mostra quando imposto la mia vista come visualizzazione del contenuto della mia attività mostra solo la mia vista ... quindi funziona ... allora perché non funziona in una vista a scorrimento? – rahul

6

Se si vogliono l'intera attività di essere uno ScrollView, poi fare qualcosa di simile:

<?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> 

Poi l'attività che utilizza questo layout può essere simile a questa:

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

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

Ciò presuppone che il nome del file XML è scroll_layout.xml.

2

Se si desidera effettuare lo scorrimento autonomamente, è possibile utilizzare uno Scroller e uno VelocityTracker ignorando il metodo onTouchEvent della visualizzazione personalizzata. Per aiutarti a implementarlo, ti consiglio di consultare i Javadoc di queste classi e dare un'occhiata alle implementazioni dei widget Android che eseguono lo scrolling come lo NumberPicker.