cómo deslizar un evento button onTouch en android

Cómo deslizar un botón en el evento android de toque con direcciones izquierda, derecha, arriba, abajo ..? … Soy nuevo en android y quiero desarrollar una aplicación de devolución de llamada. Por favor, ayuda proporcionando algunos enlaces

callbackButton.setOnTouchListener(new OnTouchListener() { private float currX; private float currY; @Override public boolean onTouch(View v, MotionEvent event) { float x1 = 0, x2, y1 = 0, y2, dx, dy , oldx =0,oldy=0; String direction; switch(event.getAction()) { case MotionEvent.ACTION_DOWN: oldx = event.getX(); oldy = event.getY(); break; case MotionEvent.ACTION_MOVE: x2 = event.getX(); y2 = event.getY(); dx = x2-x1; dy = y2-y1; // Use dx and dy to determine the direction if(Math.abs(dx) > Math.abs(dy)) { if(dx>0) { direction = "right"; Log.e("right...","moving.."); }else{ direction = "left"; Log.e("left...","moving.."); } } else { if(dy>0) { direction = "down"; Log.e("down...","moving.."); currX = event.getRawX(); currY = event.getRawY(); Log.e("x=", ""+(currX-oldx)); Log.e("y=", ""+(currY-oldy)); MarginLayoutParams marginParams = new MarginLayoutParams(v.getLayoutParams()); marginParams.setMargins((int)(currX-oldx), (int)(currY-oldy),0, 0); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams); v.setLayoutParams(layoutParams); } else { direction = "up"; Log.e("up...","moving.."); } } } return true; } }); 

Este es mi código para que imageButton se mueva en el evento touch. Pero este código no funciona como yo quiero

Aquí encontrará una explicación sobre cómo manejar eventos táctiles:

http://developer.android.com/guide/topics/ui/ui-events.html

Entonces, en el método on touch, necesitas

  • detectar cuando el usuario puso su dedo hacia abajo
  • almacenar la posición del dedo
  • detectar cuando el usuario se mueve
  • comparar con la posición anterior
  • detectar cuando el usuario deja de tocar la pantalla

Ejemplo (usando código de http://developer.android.com/training/graphics/opengl/touch.html )

 @Override public boolean onTouchEvent(MotionEvent e) { // MotionEvent reports input details from the touch screen // and other input controls. In this case, you are only // interested in events where the touch position changed. float x = e.getX(); float y = e.getY(); switch (e.getAction()) { case MotionEvent.ACTION_DOWN: mIsDown = true; break; case MotionEvent.ACTION_MOVE: float dx = x - mPreviousX; float dy = y - mPreviousY; // Here you can try to detect the swipe. It will be necessary to // store more than the previous value to check that the user move constantly in the same direction detectSwipe(dx, dy); case MotionEvent.ACTION_UP: mIsDown = false; break; } mPreviousX = x; mPreviousY = y; return true; } 

Con este simple caso, ni siquiera necesitará almacenar cuando el usuario ponga el dedo hacia abajo o hacia arriba (ya que mover implica un dedo hacia abajo), pero puede ser útil tener el valor booleano almacenado)

Buena suerte con tu aplicación

EDITAR:

Parece que editas tu publicación con algún código. Usted dice que no obtiene los resultados expelidos, pero no dice lo que obtiene. Esto podría ser útil para ayudarle.

Usted debe tratar de encontrar si una biblioteca que detecta movimientos de deslizar ya existe. Estoy bastante seguro de que hay muchos por ahí

EDIT 2: Asumo que el botón es un android.Button simple. Una solución podría ser crear una clase que extienda el botón (ex: MySwipableButton). en su xml, usted crea una disposición que contiene su MySwipableButton, y déle el lugar del enought a ser movido (por ejemplo, tiene width = fill_parent, puesto que usted lo quiere deslizar en la pantalla del while). MySwipableButton implementa onTouch para almacenar la posición en la que debería estar el botón (usando el método que ya tienes) MySwipableButton también sobreescribir onDraw(Graphics g) . En onDraw, se pinta el botón (super.draw ()) en el lugar que debe ser (en relación con el golpe actual) y dejar el resto de la vista vacía

Compruebe mi blogspot en el que he mostrado el evento de arrastrar la imagen de onTouch .

Edit : aquí está el código completo:

En primer lugar crear proyecto android en su eclipse y crear un archivo de clase y diseño como a continuación:

MainActivity.java

 public class MainActivity extends Activity { private ImageView m_ivImage, m_ivImage1; private int m_counter = 0; float m_lastTouchX, m_lastTouchY, m_posX, m_posY, m_prevX, m_prevY, m_imgXB, m_imgYB, m_imgXC, m_imgYC, m_dx, m_dy; private LinearLayout m_llTop; private AbsoluteLayout m_alTop; private Button m_btnAddView, m_btnRemove; private Context m_context; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); m_context = this; m_prevX = 0; m_prevY = 0; m_imgXB = 50; m_imgYB = 100; m_imgXC = 150; m_imgYC = 100; m_ivImage = (ImageView) findViewById(R.id.ivImage); m_ivImage1 = (ImageView) findViewById(R.id.ivImage1); m_llTop = (LinearLayout) findViewById(R.id.llTop); m_alTop = (AbsoluteLayout) findViewById(R.id.alTop); m_btnAddView = (Button) findViewById(R.id.btnAdd); m_btnRemove = (Button) findViewById(R.id.btnRemove); m_ivImage.setOnTouchListener(m_onTouchListener); m_ivImage1.setOnTouchListener(m_onTouchListener); m_btnAddView.setOnClickListener(m_onClickListener); m_btnRemove.setOnClickListener(m_onClickListener); } OnClickListener m_onClickListener = new OnClickListener(){ @Override public void onClick(View p_v) { switch (p_v.getId()) { case R.id.btnAdd: addView(); break; case R.id.btnRemove: removeView(); break; default: break; } } }; OnTouchListener m_onTouchListener = new OnTouchListener(){ @Override public boolean onTouch(View p_v, MotionEvent p_event) { switch (p_event.getAction()) { case MotionEvent.ACTION_DOWN: { m_lastTouchX = p_event.getX(); m_lastTouchY = p_event.getY(); break; } case MotionEvent.ACTION_UP: { break; } case MotionEvent.ACTION_MOVE: { m_dx = p_event.getX() - m_lastTouchX; m_dy = p_event.getY() - m_lastTouchY; m_posX = m_prevX + m_dx; m_posY = m_prevY + m_dy; if (m_posX > 0 && m_posY > 0 && (m_posX + p_v.getWidth()) < m_alTop.getWidth() && (m_posY + p_v.getHeight()) < m_alTop.getHeight()) { p_v.setLayoutParams(new AbsoluteLayout.LayoutParams(p_v.getMeasuredWidth(), p_v.getMeasuredHeight(), (int) m_posX, (int) m_posY)); m_prevX = m_posX; m_prevY = m_posY; } break; } } return true; } }; /** * Add view dynamically for drag and drop */ private void addView() { ImageView m_img = new ImageView(m_context); TextView m_tv=new TextView(m_context); if (m_counter < 5) { if (m_counter % 2 == 0) { m_img.setBackgroundResource(R.drawable.bol_green); m_tv.setText("Hello! Drag Me! "); m_alTop.addView(m_tv, new LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, ((int) m_imgXB), ((int) m_imgYB))); m_alTop.addView(m_img, new LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, ((int) m_imgXB), ((int) m_imgYB))); } else { m_img.setBackgroundResource(R.drawable.bol_paars); m_alTop.addView(m_img, new LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, ((int) m_imgXC), ((int) m_imgYC))); } m_counter++; if (m_counter == 5) m_btnAddView.setEnabled(false); } m_img.setOnTouchListener(m_onTouchListener); m_tv.setOnTouchListener(m_onTouchListener); } public void removeView() { m_counter = 0; m_alTop.removeAllViews(); m_alTop.invalidate(); m_btnAddView.setEnabled(true); } } 

main_layout.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/llTop" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <AbsoluteLayout android:id="@+id/alTop" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_margin="10dp" android:layout_weight=".70" > <ImageView android:id="@+id/ivImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:src="@drawable/ic_menu_share" android:visibility="gone" /> <ImageView android:id="@+id/ivImage1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:layout_x="193dp" android:layout_y="29dp" android:src="@drawable/ic_launcher" /> </AbsoluteLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="0dp" android:layout_gravity="center" android:layout_weight=".30" > <Button android:id="@+id/btnAdd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="Add View" /> <Button android:id="@+id/btnRemove" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="Remove View" android:visibility="visible" /> </LinearLayout> </LinearLayout> 

Aquí está el código del archivo de límites xml que muestra el borde del diseño en el que se mueve el objeto.

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <stroke android:width="1dp" android:color="#000000"/> <corners android:topLeftRadius="8dp" android:topRightRadius="8dp" android:bottomLeftRadius="8dp" android:bottomRightRadius="8dp"/> <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp"/> <gradient android:angle="270" android:endColor="#FFFFFF" android:startColor="#FFFFFF" android:type="linear" android:centerColor="#FFFFFF"/> </shape> </item> </selector> 
  • Arrastrar y soltar imágenes en android
  • Ocultar teclado en android mientras se toca fuera Editar área de texto
  • No puede manejar simultáneamente los eventos de clic y de toque
  • Android: ¿Cómo determinar el índice de caracteres de la posición de un evento táctil en TextView?
  • Gire la vista de disposición de androide sobre su centro usando el oyente táctil
  • Obtener coordenadas reales de xy de los usuarios
  • Cambiar la altura del diseño relativo con la misma velocidad que el dedo del usuario Se mueve en el diseño
  • Usando OnTouchListener y OnLongClickListener interfiere entre sí
  • Pase Android NestedScrollView desplazamientos horizontales a un padre Ver
  • Android: OnTouch, MotionEvent.ACTION_MOVE no está reconocido?
  • Android principiante: toque eventos en android gridview
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.