studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android textview screen onlongclicklistener

android - programacion - Mover la vista de texto a través de toda la pantalla



manual de programacion android pdf (2)

public void drag(MotionEvent event, View v) { FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) v.getLayoutParams(); switch(event.getAction()) { case MotionEvent.ACTION_MOVE: { params.topMargin = (int)event.getRawY() - (v.getHeight()); params.leftMargin = (int)event.getRawX() - (v.getWidth()/2); v.setLayoutParams(params); break; } case MotionEvent.ACTION_UP: { params.topMargin = (int)event.getRawY() - (v.getHeight()); params.leftMargin = (int)event.getRawX() - (v.getWidth()/2); v.setLayoutParams(params); break; } case MotionEvent.ACTION_DOWN: { v.setLayoutParams(params); break; } } }

Copie este método a su clase y llámelo dentro de ontouch de su textview (). Aquí supongo que usas Framelayout. Si no, cambie los parámetros de diseño en consecuencia.

Desarrollé una aplicación que muestra el tiempo en una pantalla completa. Las horas, minutos y segundos se muestran en el medio de la pantalla. Así que mi objetivo es, cuando hago clic largo en cualquiera de las vistas de texto, poder recorrer toda la pantalla y colocarla donde quiero ...

Traté de encontrar un código adecuado para aplicar a mi aplicación, y encontré un código que hace que el texto en la imagen y luego mueva esa imagen. Pero el problema es que los textos se actualizan cada segundo, así que creo que crear imágenes cada segundo no es una buena idea ...

¿Alguien sabe un método para poder mover textviews a través de toda la pantalla? Esta es una de mis textviews

private TextView txtHour; txtHour = (TextView)findViewById(R.id.TxtHour); txtHour.setOnLongClickListener(new OnLongClickListener{ ....

No sé qué agregar a esto ... :( ¡Por favor AYUDA!

EDITAR: Según la primera respuesta, ¿debería mi código verse así?

txtHour.setOnLongClickListener(new OnLongClickListener() { public void onLongClick(View v){ public void drag(MotionEvent event, View v) { RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) v.getLayoutParams(); switch(event.getAction()) { case MotionEvent.ACTION_MOVE: { params.topMargin = (int)event.getRawY() - (v.getHeight()); params.leftMargin = (int)event.getRawX() - (v.getWidth()/2); v.setLayoutParams(params); break; } case MotionEvent.ACTION_UP: { params.topMargin = (int)event.getRawY() - (v.getHeight()); params.leftMargin = (int)event.getRawX() - (v.getWidth()/2); v.setLayoutParams(params); break; } case MotionEvent.ACTION_DOWN: { v.setLayoutParams(params); break; } } }});

EDIT 2: finalmente este es el código de resultado, ¿está bien?

package com.iamaner.T2Speech; //imports public class MAINActivity extends Activity{ private TextView txtHour; private TextView txtMinutes; private TextView txtSeconds; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); txtHour = (TextView)findViewById(R.id.TxtHour); txtMinutes = (TextView)findViewById(R.id.TxtMinute); txtSeconds = (TextView)findViewById(R.id.TxtSeconds); txtHour.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub drag(event, v); return false; }}); } public void drag(MotionEvent event, View v) { FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) v.getLayoutParams(); switch(event.getAction()) { case MotionEvent.ACTION_MOVE: {params.topMargin = (int)event.getRawY() - (v.getHeight()); params.leftMargin = (int)event.getRawX() - (v.getWidth()/2); v.setLayoutParams(params); break;} case MotionEvent.ACTION_UP: {params.topMargin = (int)event.getRawY() - (v.getHeight()); params.leftMargin = (int)event.getRawX() - (v.getWidth()/2); v.setLayoutParams(params); break;} case MotionEvent.ACTION_DOWN: {v.setLayoutParams(params); break;} }} }

Y este framelayout

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/your_layout" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/TxtHour" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15mm" android:textColor="#000000"/> <TextView android:id="@+id/TxtPoints1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/separator" android:textSize="15mm" android:textColor="#000000" android:layout_gravity="center" android:gravity="center"/> <TextView android:id="@+id/TxtMinute" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15mm" android:textColor="#000000" android:layout_gravity="center" android:gravity="center" /> <TextView android:id="@+id/TxtPoints2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/separator" android:textSize="15mm" android:textColor="#000000" android:layout_gravity="center" android:gravity="center"/> <TextView android:id="@+id/TxtSeconds" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15mm" android:textColor="#000000" android:layout_gravity="bottom|right" /> </FrameLayout>


Agregue esto a su onCreate: mejor use FrameLayout.

txtHour.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub drag(event, v); return false; } });

Y esto para su clase de actividad fuera de cualquier método.

public void drag(MotionEvent event, View v) { RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) v.getLayoutParams(); switch(event.getAction()) { case MotionEvent.ACTION_MOVE: { params.topMargin = (int)event.getRawY() - (v.getHeight()); params.leftMargin = (int)event.getRawX() - (v.getWidth()/2); v.setLayoutParams(params); break; } case MotionEvent.ACTION_UP: { params.topMargin = (int)event.getRawY() - (v.getHeight()); params.leftMargin = (int)event.getRawX() - (v.getWidth()/2); v.setLayoutParams(params); break; } case MotionEvent.ACTION_DOWN: { v.setLayoutParams(params); break; } }