Je travaille sur un exemple dans lequel je veux faire glisser l'image correspondant à tactile dans Android. Est-ce que quelqu'un a une idée de comment je peux le faire?Touchez et faites glisser l'image dans android
Répondre
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();
}
}
fil:
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);
}
}
}
}
}
vous devriez avoir éditer votre première réponse au lieu de poster une nouvelle réponse ... – WarrenFaith
Ils ressemblent à deux réponses différentes à moi, @WarrenFaith. On a un thread pour continuer à mettre à jour l'affichage, et on attend des actions de l'utilisateur. Tant que chaque réponse est complète, je ne vois rien de mal à en poster plus d'un. –
Saviez-vous comment enregistrer le BallView en tant qu'image dans la carte SD? – chemalarrea
Comme une légère modification de la réponse Touchball - si vous n'avez pas vraiment une boucle de jeu - en d'autres termes, les seuls changements à l'écran sont directement en raison de entrée de l'utilisateur - alors il pourrait être plus logique d'omettre le fil. Sinon, il ne fait que répéter et redessiner constamment même si rien n'a changé. Donc:
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);
}
}
}
}
Certes, je suis nouveau dans le développement d'Android, il se peut que je manque quelque chose ici.
Essayez ce tutoriel .... http://www.anddev.org/basic_drag_and_drop-t3095.html – Noman
Si vous utilisez un 'SurfaceView' vous pouvez essayer de suivre ma partie tutoriel. http://www.droidnova.com/playing-with-graphics-in-android-part-vi.209.html Dans cette partie, je vous présente comment vous pouvez ajouter et modifier la position sur le SurfaceView tout en déplaçant la touche . La partie suivante est un jeu court qui implémente toutes les choses apprises dans un jeu court. Je pense que cela devrait vous aider et vous montrer comment faire ceci ... – WarrenFaith