Java 在android中触摸Cordinate后拖动图像
我正在制作一个android游戏,在我的触摸在onTouchEvent(MotionEvent)方法中进行协调后,应该会拖动一个图像。到目前为止,我已经通过单击来移动它,但不是通过拖动,我如何才能做到这一点?请帮助我,并提前表示感谢!请在此代码中查看我的onTouchEvent(MotionEvent)方法:Java 在android中触摸Cordinate后拖动图像,java,android,touch,drag,move,Java,Android,Touch,Drag,Move,我正在制作一个android游戏,在我的触摸在onTouchEvent(MotionEvent)方法中进行协调后,应该会拖动一个图像。到目前为止,我已经通过单击来移动它,但不是通过拖动,我如何才能做到这一点?请帮助我,并提前表示感谢!请在此代码中查看我的onTouchEvent(MotionEvent)方法: package com.mysoftwaremobileapps.TriangleUnlocker; import java.util.ArrayList; import androi
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)
{
}
}
}
}
package com.mysoftwaremobileapps.TriangleUnlocker;
导入java.util.ArrayList;
导入android.content.Context;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.graphics.Canvas;
导入android.graphics.Color;
导入android.graphics.Paint;
导入android.media.MediaPlayer;
导入android.os.Handler;
导入android.os.Message;
导入android.view.MotionEvent;
导入android.view.SurfaceHolder;
导入android.view.SurfaceView;
导入android.widget.TextView;
导入android.widget.Toast;
公共类GameScreenActivity扩展了SurfaceView实现了SurfaceHolder.Callback
{
类ExampleThread扩展线程
{
私有阵列列表三角形;
私有位图三角图像;
私人油漆黑色;
私有布尔运行;
私人地表持有人;
私有上下文;
私有上下文mContext1;
私人经理人;
私有处理器mHandler1;
私人三角恋;
私有长帧率;
私有布尔加载;
公共浮动x;
公众浮躁;
公众浮标x1;
公共浮动y1;
公共媒体播放器mp1;
公共索引的设置和删除;
公共int画布宽度;
公共int-livesLeftValue;
公共示例线程(SurfaceHolder sHolder、上下文上下文、处理程序)
{
mSurfaceHolder=支撑架;
mHandler=handler;
mHandler1=处理器;
mContext=上下文;
mActivity=(triangleunlockerativity)上下文;
三角形=新的ArrayList();
TriangleImage=BitmapFactory.decodeResource(getResources(),R.drawable.triangle);
黑色=新油漆();
黑色。设置样式(油漆。样式。填充);
黑色。设置颜色(颜色。灰色);
运行=真;
//这相当于每秒26帧。
帧率=(长)(1000/26);
加载=真;
}
@凌驾
公开募捐
{
(跑步时)
{
c=null;
尝试
{
c=mSurfaceHolder.lockCanvas();
已同步(mSurfaceHolder)
{
长启动=System.currentTimeMillis();
多德劳(c);
long diff=System.currentTimeMillis()-开始;
如果(差异<帧率)
睡眠(帧率-差异);
}
}捕捉(中断异常e)
{
}
最后
{
如果(c!=null)
{
mSurfaceHolder.解锁canvasandpost(c);
}
}
}
}
受保护的void doDraw(画布)
{
drawRect(0,0,canvas.getWidth(),canvas.getHeight(),黑色);
canvasGetWidth=canvas.getWidth();
//画
对于(int i=0;i