2012-04-01 8 views
0

Ich mache ein Android-Spiel, das ein Bild nach meiner Berührung ziehen sollte in OnTouchEvent (MotionEvent-Ereignis) -Methode. Bis jetzt habe ich es geschafft, es durch Klicken zu bewegen, aber nicht durch Ziehen, wie kann ich das tun? Bitte helfen Sie mir und vielen Dank im Voraus! Schauen Sie sich meine onTouchEvent (Motion Ereignis) Methode in diesem Code:Ziehen von Bildern nach der Berührung Koordinaten in Android

package com.mysoftwaremobileapps.TriangleUnlocker; 

import java.util.ArrayList; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.media.MediaPlayer; 
import android.os.Handler; 
import android.os.Message; 
import android.view.MotionEvent; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class GameScreenActivity extends SurfaceView implements SurfaceHolder.Callback 
{ 
class ExampleThread extends Thread 
{ 
    private ArrayList<Triangle> triangles; 
    private Bitmap TriangleImage; 
    private Paint black; 

    private boolean running; 

    private SurfaceHolder mSurfaceHolder; 
    private Context mContext; 
    private Context mContext1; 
    private Handler mHandler; 
    private Handler mHandler1; 
    private TriangleUnlockerActivity mActivity; 

    private long frameRate; 
    private boolean loading; 
    public float x; 
    public float y; 
    public float x1; 
    public float y1; 
    public MediaPlayer mp1; 
    public int parachuterIndexToResetAndDelete; 
    public int canvasGetWidth; 
    public int livesLeftValue; 

    public ExampleThread(SurfaceHolder sHolder, Context context, Handler handler) 
    { 
     mSurfaceHolder = sHolder; 
     mHandler = handler; 
     mHandler1 = handler; 
     mContext = context; 
     mActivity = (TriangleUnlockerActivity) context; 

     triangles = new ArrayList<Triangle>(); 
     TriangleImage = BitmapFactory.decodeResource(getResources(), R.drawable.triangle); 
     black = new Paint(); 
     black.setStyle(Paint.Style.FILL); 
     black.setColor(Color.GRAY); 

     running = true; 

     // This equates to 26 frames per second. 
     frameRate = (long) (1000/26); 
     loading = true; 
    } 

    @Override 
    public void run() 
    { 
     while (running) 
     { 
      Canvas c = null; 
      try 
      { 
       c = mSurfaceHolder.lockCanvas(); 

       synchronized (mSurfaceHolder) 
       { 
        long start = System.currentTimeMillis(); 
        doDraw(c); 
        long diff = System.currentTimeMillis() - start; 

        if (diff < frameRate) 
         Thread.sleep(frameRate - diff); 
       } 
      } catch (InterruptedException e) 
      { 
      } 
      finally 
      { 
       if (c != null) 
       { 
        mSurfaceHolder.unlockCanvasAndPost(c); 
       } 
      } 
     } 
    } 

    protected void doDraw(Canvas canvas) 
    { 
     canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), black); 
     canvasGetWidth = canvas.getWidth(); 

     //Draw 
     for (int i = 0; i < triangles.size(); i++) 
     { 
      canvas.drawBitmap(TriangleImage, triangles.get(i).getX(), triangles.get(i).getY(), null); 
     } 
    } 

    public boolean onTouchEvent(MotionEvent event) 
    { 
     if (event.getAction() != MotionEvent.ACTION_DOWN) 
     Toast.makeText(getContext(), "onTouchEvent invoked. X= " + event.getX() + " Y= " + event.getY(), 15).show(); 
     x1 = event.getX(); 
     y1 = event.getY(); 

     for (Triangle p: triangles) { 
       Toast.makeText(getContext(), "Moving the triangle after touch cordinates", 25).show(); 
       p.posX = event.getX(); 
       p.posY = event.getY(); 
      return false; 
     } 
     return loading; 
    } 

    public void displayTriangles() 
    { 
     //Parachuter nr.1 
     x = 14; 
     y = 28; 

     Triangle p = new Triangle(x, y); 
     triangles.add(p); 
    } 

    public void setRunning(boolean bRun) 
    { 
     running = bRun; 
    } 

    public boolean getRunning() 
    { 
     return running; 
    } 
} 

/** Handle to the application context, used to e.g. fetch Drawables. */ 
private Context mContext; 

/** Pointer to the text view to display "Paused.." etc. */ 
private TextView mStatusText; 

/** The thread that actually draws the animation */ 
private ExampleThread eThread; 

public GameScreenActivity(Context context) 
{ 
    super(context); 

    // register our interest in hearing about changes to our surface 
    SurfaceHolder holder = getHolder(); 
    holder.addCallback(this); 

    // create thread only; it's started in surfaceCreated() 
    eThread = new ExampleThread(holder, context, new Handler() 
    { 
     @Override 
     public void handleMessage(Message m) 
     { 
      // mStatusText.setVisibility(m.getData().getInt("viz")); 
      // mStatusText.setText(m.getData().getString("text")); 
     } 
    }); 

    setFocusable(true); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) 
{ 
    return eThread.onTouchEvent(event); 
} 

public ExampleThread getThread() 
{ 
    return eThread; 
} 

@Override 
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) 
{ 
    // TODO Auto-generated method stub 
} 

public void surfaceCreated(SurfaceHolder holder) 
{ 
    if (eThread.getState() == Thread.State.TERMINATED) 
    { 
     eThread = new ExampleThread(getHolder(), getContext(), getHandler()); 
     eThread.start(); 
    } 
    else 
    { 
     eThread.start(); 
    } 
} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) 
{ 
    boolean retry = true; 
    eThread.setRunning(false); 

    while (retry) 
    { 
     try 
     { 
      eThread.join(); 
      retry = false; 
     } 
     catch (InterruptedException e) 
     { 
     } 
    } 
} 
} 

Antwort

0

if (event.getAction() == MotionEvent.ACTION_DOWN) // stellen Sie die x und y des Objekts hier als Aktion nach unten p .posX = event.getX(); p.posY = event.getY(); }