|
||
|
![]() |
![]() |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
Poner un texto deslizable de derecha a izquierda
Hola, no se si me dejo entender quisiera hacer un textview de una sola linea que tenga entrada y salida osea que aparesca desde un lado y desaparesca en el otro, me gustaria que alguien me diga si esto se puede hacer de forma nativa o necesito de alguna libreria gracias de antemano...
|
|
#2
|
||||
|
||||
con xml se puede sin problemas y uasndo AnimationUtils.loadanimation() , yo he echo alguna intro sencilla , los archivos se guardan en res/anim.
Hay muchos ejemplos en la red por ejemplo: http://appsmolonas.com/efectos-de-an...-interpolador http://developer.android.com/guide/t...animation.html |
#3
|
||||
|
||||
Es mucho más fácil que todo eso, basta con indicar que su "ellipsize" es "marquee" y "marqueeRepeatLimit" con "marquee_forever".
Eso si, sólo funciona si es el elemento seleccionado, lo que yo hago es crear una subclase de TextView y sobreescribir el método isFocused para que siempre responda true. Funciona de lujo, incluso con varios elementos con marquesina al mismo tiempo. |
Gracias de parte de: | ||
#4
|
||||
|
||||
ostras eso no lo conocia, un ejemplillo estaría bien kriogen
|
#5
|
||||
|
||||
Creas una View que herede de TextView y haces que isFocused siempre devuelva true. Luego usas esa View en lugar del TextView, y le pones como propiedades en el Layout: android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:focusable="true" android:focusableInTouchMode="true" Y ya está, si el texto ocupa más que la línea hará el efecto marquesina y se irá mostrando el texto que falta. Cuando llegue al final volverá a empezar a salir el texto inicial. El efecto sólo se producirá si realmente el texto ocupa más que la línea, sino se comportará como un TextView normal. |
#6
|
||||
|
||||
aja te explico la idea que se me ocurre..
Esto lo puedo hacer con un textview normal? mi idea es que en una lista los items llevan un textview que es una descripcion y esta segun resolucion es muy larga si lo pongo en single lin podria hacer este efecto. como lo ves ? funcionara en el textview o tengo que crear un view? |
#7
|
||||
|
||||
El problema es que sólo funciona si el elemento está seleccionado, por eso lo de hacer la subclase con "isFocused" devolviendo siempre true, así engañas al sistema y piensa que el elemento está seleccionado aunque no lo esté y hace el efecto marquesina.
Desde luego si vas a ponerlo en un ListView y hay varios a la vez que pueden hacer el efecto, tienes que usar la subclase. |
#8
|
||||
|
||||
ok ,hare pruevas
|
#9
|
||||
|
||||
Bueno despues de varias pruevas no me funciona , este es mi codigo
XML Código:
<TextView android:layout_width="200dp" android:layout_height="wrap_content" android:text="Small Text" class="com.rafaxplayer.amsfiles.classes.marqueTextView" android:id="@+id/marquetext" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:focusable="true" android:focusableInTouchMode="false" /> Código:
public class marqueTextView extends TextView { public marqueTextView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean isFocused() { return true; } } |
#10
|
||||
|
||||
La tarjeta madre de mi ordenador se quemo por eso no pude responder, muchas gracias por su ayuda a todos lo probare en estos dias en cuanto me compre otro gracias nuevamente todo lo que viene de ustedes es de mucha ayuda.
|
#11
|
||||
|
||||
Hola muchas gracias lo probe en la PC de mi hermana pero no sale como yo esperaba use la pagina de ejemplo para guiarme, se anima y todo pero no muestra el texto completo alguna idea? dejo mi codigo por si alguien puede ayudarme muchas gracias
Este es el layout de mi actividad [PHP]<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.JimSoft.Entertainment.edu.Chemi stryTable.MainActivity" android ![]() <TextView android:id="@+id/TextoAnimable" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Una enboltura de un chocolate tarda en degradarse entre 2000 a 5000 años, tirala en su correspondiente contenedor para no contaminar." android:lines="1"/> <Spinner android:id="@+id/interpolador" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" /> </LinearLayout>[/PHP] Este es mi codigo java [PHP]package com.JimSoft.Entertainment.edu.ChemistryTable; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.Spinner; import android.widget.TextView; public class MainActivity extends Activity { TextView Texto; Animation animacion1; Spinner combo_spinner; int [] interpolador = { R.anim.acelerador }; String [] interpolador_nombre = { "accelerate" }; ArrayAdapter<String> combo_adaptador; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Texto = (TextView) findViewById( R.id.TextoAnimable); combo_adaptador = new ArrayAdapter<String> ( this, android.R.layout.simple_spinner_item, interpolador_nombre); combo_spinner = (Spinner) findViewById(R.id.interpolador); combo_spinner.setAdapter(combo_adaptador); combo_spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> padre, View arg1, int position, long id) { animacion1 = AnimationUtils.loadAnimation( MainActivity.this, interpolador[position]); //animacion1.setStartTime(1000); Texto.startAnimation(animacion1); } @Override public void onNothingSelected(AdapterView<?> padre) { // TODO Auto-generated method stub } }); } }[/PHP] Y finalmente este es el xml de la animacion [PHP]<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <translate android:fromXDelta="-100%p" android:toYDelta="0" android:duration="12000" android:repeatCount="infinite"/> </set>[/PHP] Muchas gracias por toda la ayuda proporcionada. |
#12
|
||||
|
||||
Bueno al final lo conseguí. no me funcionaba con la custom class de textview que comentaba kriogen es mas fácil de la forma que muestro lo único que hay que seleccionar el textview para que xute y no es esa mi solucion.
el xml es este : Código:
<TextView android:layout_width="200dp" android:layout_height="wrap_content" android:text="Small Text" class="com.rafaxplayer.amsfiles.classes.marqueTextView" android:id="@+id/marquetext" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:focusable="true" android:focusableInTouchMode="false" /> |
Gracias de parte de: | ||
#13
|
||||
|
||||
Bueno al final lo conseguí. no me funcionaba con la custom class de textview que comentaba kriogen es mas fácil de la forma que muestro lo único que hay que seleccionar el textview para que xute y no es esa mi solucion.
el xml es este : Código:
<TextView android:layout_width="200dp" android:layout_height="wrap_content" android:text="Small Text" class="com.rafaxplayer.amsfiles.classes.marqueTextView" android:id="@+id/marquetext" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:focusable="true" android:focusableInTouchMode="false" /> ![]() Yo en el XML lo defino así: Código:
<com.rafaxplayer.amsfiles.classes.marqueTextView android:layout_width="200dp" android:layout_height="wrap_content" android:text="Small Text" android:id="@+id/marquetext" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:focusable="true" android:focusableInTouchMode="true" /> |
Gracias de parte de: | ||
#14
|
||||
|
||||
KriogeN eres lo maximo me funcionó de maravilla, el unico problema fue que tuve que cambiar el width a fill_parent por que no me mostraba todo el texto, gracias por tu ayuda.
|
#15
|
||||
|
||||
Hola de nuevo busque por todas partes comenzando por Stack over flow y no encontre nada, podrias decirme por favor como puedo hacer para cambiar el texto una vez que haya terminado pero el marque continue su animación no se si me entiendes... Gracias de antemano.
|
#16
|
||||
|
||||
Hola de nuevo busque por todas partes comenzando por Stack over flow y no encontre nada, podrias decirme por favor como puedo hacer para cambiar el texto una vez que haya terminado pero el marque continue su animación no se si me entiendes... Gracias de antemano.
![]() ¿Te refieres a hacer un setText nuevo cuando el marquee haya terminado? |
#17
|
||||
|
||||
|
#18
|
||||
|
||||
Ya hice todo bien.
Pero tengo un problema: El texto no llega a verse hasta el final. Ates de llegar al final, se repite la animacion desde el principio. Claro, texto de unos 90 caracteres. una o 2 palabras antes se reinicia la cuestion. xml: [PHP]<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Ejemplo." gn28:cust_font="Chelsea" android:textColor="@color/white" android:id="@+id/textMarquee" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:focusable="true" android:focusableInTouchMode="false" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:paddingLeft="10dip" android:paddingRight="10dip" />[/PHP] En la actividad: [PHP]textMarquee=(TextView)findViewById(R.id.textMarque e); textMarquee.setSelected(true); //textMarquee.setSingleLine(); textMarquee.isFocused();[/PHP] |
![]() |
![]() |
||||||
|