2010-05-09 15 views
7

He rodado mi propia vista personalizada y puedo dibujar bien en la pantalla, pero lo que realmente me gustaría hacer es establecer el Medido Altura de la pantalla, por ejemplo, 1000px y dejar que el el usuario se desplaza en el eje Y, pero tengo problemas para hacerlo. ¿Alguien puede ayudar?Android: hacer una vista personalizada desplazable

Aquí hay algo de código:

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

y

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

He tratado de anular scrollTo, scrollBy, etc awakenScrollBars con una llamada a super pero fue en vano. ¿Me estoy perdiendo algo tonto, o estoy cometiendo algún error fundamental?

gracias de antemano,

Martyn

Adición:

he intentado añadir esto como un componente personalizado con el archivo de diseño de abajo y cambiar el código en TestScreen para apuntar a la recurso correcto con setContentView(R.layout.exampleLayout), pero esto hace que el emulador se cuelgue. He intentado comentar el código abajo al mínimo y todavía falla, así que hay algo fundamentalmente equivocado que estoy haciendo, pero no estoy seguro de lo que es:

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

Respuesta

15

Sólo hay que poner la vista en un ScrollView!

Tenga en cuenta que la ScrollWiew debe ser el nodo raíz (en este caso es su LinearLayout)

+0

Este fue el método que tomé eventualmente. Tengo un LinearLayout como nodo base en el diseño xml, luego una vista de desplazamiento con mi vista personalizada contenida en – Martyn

+1

@Moons Tengo un diseño lineal en mi vista de desplazamiento pero cuando agrego una vista de imagen aparece en el desplazamiento, pero cuando agregar mi vista personalizada, no ... pero muestra cuando configuro mi vista como la vista de contenido de mi actividad, solo muestra mi vista ... para que funcione ... entonces, ¿por qué no funciona? una vista de desplazamiento? – rahul

6

Si estás interesado en toda la actividad a ser un ScrollView, y luego hacer algo como esto:

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

Entonces la actividad que utiliza este diseño puede ser algo como esto:

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

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

esto supone que el nombre de su archivo XML es scroll_layout.xml.

2

Si desea hacer un desplazamiento por su cuenta, puede usar un Scroller y un VelocityTracker mientras anula el método onTouchEvent de su vista personalizada. Para ayudarlo a implementarlo, le recomiendo ver los Javadocs de estas clases y echar un vistazo a las implementaciones de widgets de Android que se desplazan como NumberPicker.

Cuestiones relacionadas