¿Cómo mover una imagen en el diseño xml cuando el usuario está en un evento táctil?

Implementé una aplicación con imagen. En mi aplicación he usado una imagen cada vez que el usuario toca una imagen, me gustaría mover la imagen junto con el toque de su dedo. He implementado mi aplicación de la siguiente manera:

((ImageView)findViewById(R.id.imageView1)).setOnTouchListener(new OnTouchListener() {
   @Override
   public boolean onTouch(View v, MotionEvent event) {
      switch (event.getAction()) {
         case MotionEvent.ACTION_MOVE:
            //I would like to Move image along with user finger touch code
            break;

         default:
            break;
      }
      return false;
   }
});

Desde el código anterior, no puedo mover la imagen junto con el dedo del usuario.

preguntado el 10 de marzo de 12 a las 04:03

3 Respuestas

respondido 10 mar '12, 04:03

-1 Esto debería ser un comentario con un enlace en su lugar. - usuario658042

Solo una sugerencia, me funciona:

Hacer que el retorno sea falso a verdadero del método onTouch ()

respondido 10 mar '12, 05:03

Estoy usando este código para lograr esto

package mani.droid.touchdrag;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

public class MainActivity extends Activity {

Bitmap img;
float x;
float y;
boolean isStarted = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    img = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);

    setContentView(new MyScreen(this));
}

public class MyScreen extends View {

    Context context;

    public MyScreen(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        this.context = context;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        switch(event.getAction())
        {
            case MotionEvent.ACTION_DOWN:
                float xdiff = Math.abs( x - event.getX());
                float ydiff =  Math.abs( y - event.getY());
                if( xdiff < 23 || ydiff < 23 ){
                    isStarted = true;
                }
                break;

            case MotionEvent.ACTION_MOVE:
                if(isStarted)
                {
                    x = event.getX() - img.getWidth()/2;
                    y = event.getY() - img.getHeight()/2;
                    Log.v("X:" + x, "Y: " + y);
                    this.invalidate();
                }
                break;

            case MotionEvent.ACTION_UP:
                isStarted = false;

        }
        return true;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);

        canvas.drawBitmap(img, x, y, null);
    }
}
}

y está funcionando perfectamente ...

Respondido el 13 de diciembre de 12 a las 12:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.