2010-05-09 26 views
7

Rzuciłem własny widok niestandardowy i mogę narysować na ekranie wszystko w porządku, ale chciałbym ustawić zmierzoną wysokość ekranu na 1000px i pozwolić użytkownik przewiń na osi Y, ale mam problemy z wykonaniem tego. Czy ktoś może pomóc?Android: wykonaj przewijany widok niestandardowy

Oto niektóre kodu:

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

i

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

Próbowałem przesłonić scrollTo, scrollBy, awakenScrollBars etc z wezwaniem do Super, ale bezskutecznie. Czy brakuje mi czegoś głupiego, czy też popełniam jakiś zasadniczy błąd?

Dziękuję z góry,

Martyn

Dodatek:

Próbowałem dodać to jako własny składnik z plikiem layoutu poniżej i zmienił kod w TestScreen aby wskazać na poprawny zasób z setContentView(R.layout.exampleLayout), ale to powoduje awarię emulatora. Próbowałem komentowania kodu w dół do minimum i nadal ulega awarii, więc jest coś fundamentalnie złego, że robię, ale nie jestem pewien, co to jest:

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

Odpowiedz

15

Wystarczy umieścić swój pogląd w Scrollview!

Zauważ, że ScrollWiew powinien być węzeł główny (tutaj to twoja LinearLayout)

+0

To była metoda, którą ostatecznie podjąłem. Mam LinearLayout jako węzeł podstawowy w układzie xml, a następnie Scrollview z moim niestandardowym widokiem zawartym w – Martyn

+1

@ Moons Mam Linearny układ w obrębie mojego widoku przewijania, ale kiedy dodaję widok obrazu, pojawia się on w zwoju, ale kiedy dodaj do tego mój niestandardowy widok, ale nie pokazuje się, ale pokazuje, kiedy ustawiam mój widok jako widok treści mojej aktywności, po prostu pokazuje mój widok ... tak, że działa ... to dlaczego to nie działa? widok przewijania? – rahul

6

Jeśli chcą całą aktywność być Scrollview, zrób coś takiego:

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

Następnie aktywność, która wykorzystuje ten układ może wyglądać następująco:

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

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

ten zakłada, że ​​nazwa pliku xML jest scroll_layout.xml.

2

Jeśli chcesz przewijać samodzielnie, możesz użyć opcji Scroller i VelocityTracker, zastępując metodę niestandardowego widoku metodą onTouchEvent. Aby pomóc Ci go wdrożyć, polecam przejrzeć Javadocs tych klas i przyjrzeć się implementacjom widgetów Androida, które przewijają się tak, jak NumberPicker.

Powiązane problemy