usar studio reproduciendo programacion oreo modo imagen este esta como activar android touch drag

studio - Toca y arrastra la imagen en android.



manual de programacion android pdf (2)

Como una ligera modificación de la respuesta de TouchBall, si en realidad no tiene un bucle de juego, en otras palabras, los únicos cambios en la pantalla se deben directamente a la entrada del usuario, entonces puede que tenga más sentido dejar de lado el hilo. De lo contrario, simplemente se repetirá y volverá a dibujar, incluso si nada ha cambiado. Asi que:

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 puede que me esté faltando algo aquí.

Estoy trabajando en un ejemplo en el que quiero arrastrar la imagen correspondiente al tacto en Android. ¿Alguien tiene una idea de cómo puedo hacerlo?


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); } } } } }