Estoy trabajando en un ejemplo en el que quiero arrastrar la imagen correspondiente al toque en Android. ¿Alguien tiene una idea sobre cómo puedo hacerlo?Toque y arrastre la imagen en android
Respuesta
public class TouchBall extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int w=getWindowManager().getDefaultDisplay().getWidth()-25;
int h=getWindowManager().getDefaultDisplay().getHeight()-25;
BallView ballView=new BallView(this,w,h);
setContentView(ballView);
}
}
public class BallView extends SurfaceView implements SurfaceHolder.Callback {
private Bitmap bitmap ;
private MyThread thread;
private int x=20,y=20;int width,height;
public BallView(Context context,int w,int h) {
super(context);
width=w;
height=h;
thread=new MyThread(getHolder(),this);
getHolder().addCallback(this);
setFocusable(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.ball_green);
canvas.drawColor(Color.BLUE);//To make background
canvas.drawBitmap(bitmap,x-(bitmap.getWidth()/2),y-(bitmap.getHeight()/2),null);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
x=(int)event.getX();
y=(int)event.getY();
if(x<25)
x=25;
if(x> width)
x=width;
if(y <25)
y=25;
if(y > 405)
y=405;
return true;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
thread.startrun(true);
thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
thread.startrun(false);
thread.stop();
}
}
hilo:
public class MyThread extends Thread {
private SurfaceHolder msurfaceHolder;
private BallView mballView;
private boolean mrun =false;
public MyThread(SurfaceHolder holder, BallView ballView) {
msurfaceHolder = holder;
mballView=ballView;
}
public void startrun(boolean run) {
mrun=run;
}
@Override
public void run() {
super.run();
Canvas canvas;
while (mrun) {
canvas=null;
try {
canvas = msurfaceHolder.lockCanvas(null);
synchronized (msurfaceHolder) {
mballView.onDraw(canvas);
}
} finally {
if (canvas != null) {
msurfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
}
deberías haber editado tu primera respuesta en lugar de publicar una nueva respuesta ... – WarrenFaith
Me parecen dos respuestas diferentes, @WarrenFaith. Uno tiene un hilo para seguir actualizando la pantalla, y uno espera las acciones del usuario. Siempre que se complete cada respuesta, no veo nada de malo en publicar más de una. –
¿Sabía cómo guardar el BallView como una imagen en la tarjeta SD? – chemalarrea
Como una ligera modificación de la respuesta Touchball - si realmente no tiene un juego de bucle - en otras palabras, los únicos cambios en la pantalla son directamente debido a entrada del usuario - entonces podría tener más sentido dejar fuera el hilo. De lo contrario, solo está en constante bucle y redibujo incluso si nada ha cambiado. Entonces:
public class TouchBall extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int w=getWindowManager().getDefaultDisplay().getWidth()-25;
int h=getWindowManager().getDefaultDisplay().getHeight()-25;
BallView ballView=new BallView(this,w,h);
setContentView(ballView);
}
}
public class BallView extends SurfaceView implements SurfaceHolder.Callback {
private Bitmap bitmap ;
private int x=20,y=20;int width,height;
public BallView(Context context,int w,int h) {
super(context);
width=w;
height=h;
getHolder().addCallback(this);
setFocusable(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.ball_green);
canvas.drawColor(Color.BLUE);//To make background
canvas.drawBitmap(bitmap,x-(bitmap.getWidth()/2),y-(bitmap.getHeight()/2),null);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
x=(int)event.getX();
y=(int)event.getY();
if(x<25)
x=25;
if(x> width)
x=width;
if(y <25)
y=25;
if(y > 405)
y=405;
updateBall();
return true;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
private void updateBall() {
Canvas canvas = null;
try {
canvas = getHolder().lockCanvas(null);
synchronized (getHolder()) {
this.onDraw(canvas);
}
}
finally {
if (canvas != null) {
getHolder().unlockCanvasAndPost(canvas);
}
}
}
}
Es cierto que soy nuevo en el desarrollo de Android, por lo que me puede faltar algo aquí.
- 1. Zoom y arrastre una imagen en android
- 2. UIView arrastre (imagen y texto)
- 3. Android: toque múltiple y TYPE_SYSTEM_OVERLAY
- 4. UIButton - En el toque cambiar la imagen
- 5. Android 2.2 Haga clic y arrastre la imagen centrada en contacto
- 6. Imagen de arrastre al tocar
- 7. ¿cuál es la diferencia entre toque y toque en IOS
- 8. android arrastre view smooth
- 9. Girar la imagen correspondiente a la función de arrastre táctil en iPhone
- 10. Detectando la posición inicial y final de un 'arrastre' en Android, y dibujando una línea entre ellos
- 11. jquery arrastre y gire en el ángulo
- 12. Girar la imagen junto con el toque para fijar el punto en Android
- 13. WPF arrastre y suelte en DataGrid
- 14. JTable - arrastre y suelte
- 15. Overlay de Android para tomar TODO el toque, y pasarlos?
- 16. UII detección de contacto táctil y arrastre
- 17. arrastre y suelte en NotifyIcon en la bandeja en C#
- 18. ocultar Android y la eliminación de la imagen en IMAGEVIEW
- 19. PyQT4: Arrastre y suelte archivos en QListWidget
- 20. android - Cómo cortar una parte de la imagen y mostrarla en la vista de la imagen
- 21. Cacao: Cómo transformar una imagen de arrastre mientras arrastra
- 22. NSTableView y arrastre y suelte desde Finder
- 23. UITableView toque y mantenga + arrastrar y soltar
- 24. Usando: counter_cache y: toque en la misma asociación
- 25. ¿Cómo recortar y rotar la imagen mediante programación en Android?
- 26. Android: imagen sobre imagen
- 27. Cómo identificar el toque de tres dedos en Android
- 28. clon node en arrastre
- 29. Recortar imagen en Android
- 30. Simular toque en iphone
Pruebe este tutorial .... http://www.anddev.org/basic_drag_and_drop-t3095.html – Noman
Si utiliza un 'SurfaceView' puede intentar seguir mi parte tutorial. http://www.droidnova.com/playing-with-graphics-in-android-part-vi,209.html En esta parte, le presento cómo puede agregar y cambiar la posición en el SurfaceView mientras mueve el tacto . La parte posterior es un juego corto que implementa todo lo aprendido en un juego corto. Creo que eso debería ayudarte y mostrarte cómo hacer esto ... – WarrenFaith