如何在android surfaceview中水平和垂直直线或倾斜移动对象
我的应用程序中有一个球,它随着触摸而移动。我只是想让它只水平、垂直或倾斜地移动,而不是让它曲折地移动,我厌倦了遵循代码,它工作得很好如何在android surfaceview中水平和垂直直线或倾斜移动对象,android,canvas,bitmap,surfaceview,Android,Canvas,Bitmap,Surfaceview,我的应用程序中有一个球,它随着触摸而移动。我只是想让它只水平、垂直或倾斜地移动,而不是让它曲折地移动,我厌倦了遵循代码,它工作得很好 public class MainActivity extends Activity implements OnTouchListener { Ourview v; Bitmap ball; float x,y; @Override public void onCreate(Bundle savedInstanceState) { super.onCr
public class MainActivity extends Activity implements OnTouchListener {
Ourview v;
Bitmap ball;
float x,y;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
v = new Ourview(this);
v.setOnTouchListener(this);
ball = BitmapFactory.decodeResource(getResources(), R.drawable.circle_green);
x = y = 0;
setContentView(v);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
v.pause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
v.resume();
}
public class Ourview extends SurfaceView implements Runnable{
Thread t = null;
SurfaceHolder holder;
boolean isItOk = false;
public Ourview(Context context) {
super(context);
// TODO Auto-generated constructor stub
holder = getHolder();
}
public void run() {
// TODO Auto-generated method stub
while (isItOk == true){
//perfom convas drawing
if (!holder.getSurface().isValid()){
continue;
}
Canvas c = holder.lockCanvas();
c.drawARGB(250, 10, 50, 100);
c.drawBitmap(ball, x - (ball.getWidth()/2), y - (ball.getHeight()/2), null);
holder.unlockCanvasAndPost(c);
}
}
public void pause(){
isItOk = false;
while(true){
try{
t.join();
}catch (InterruptedException e){
e.printStackTrace();
}
break;
}
t = null;
}
public void resume(){
isItOk = true;
t = new Thread(this);
t.start();
}
}
public boolean onTouch(View v, MotionEvent me) {
// TODO Auto-generated method stub
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
switch(me.getAction()){
case MotionEvent.ACTION_DOWN:
x = me.getX();
y = me.getY();
break;
case MotionEvent.ACTION_UP:
x = me.getX();
y = me.getY();
break;
case MotionEvent.ACTION_MOVE:
x = me.getX();
y = me.getY();
break;
}
return true;
}
}
我的球在任何方向移动。我只想限制我的球只在水平、垂直或倾斜方向移动,它不应该以之字形移动
谢谢您可以做一个测试,看看球应该朝哪个方向移动。首先,设置一个特定的阈值
t
。如果用户在x或y方向上移动超过t
,则会记录移动。因此,计算deltaX=x-me.getX()
和deltaY=y-me.getY()
如果仅deltaX>t
,则水平移动球。如果仅deltaY>t
,则垂直移动球
如果两者都足够大,则在x和y方向上以相同的量移动球。这将使球沿对角线移动。你可以做一个测试,看看球应该朝哪个方向移动。首先,设置一个特定的阈值
t
。如果用户在x或y方向上移动超过t
,则会记录移动。因此,计算deltaX=x-me.getX()
和deltaY=y-me.getY()
如果仅deltaX>t
,则水平移动球。如果仅deltaY>t
,则垂直移动球
如果两者都足够大,则在x和y方向上以相同的量移动球。这将使球沿对角线移动。在此处添加一些更改:
case MotionEvent.ACTION_DOWN:
xStart = me.getX();
yStart = me.getY();
break;
case MotionEvent.ACTION_UP:
xEnd = me.getX();
yEnd = me.getY();
break;
case MotionEvent.ACTION_MOVE:
x = me.getX();
y = me.getY();
break;
然后在画布上画一条线:
c.drawLine(xStart,yStart,xEnd,YEnd,paint);
这将从开始触摸到结束触摸画一条直线希望这将对您有所帮助。在此处添加一些更改:
case MotionEvent.ACTION_DOWN:
xStart = me.getX();
yStart = me.getY();
break;
case MotionEvent.ACTION_UP:
xEnd = me.getX();
yEnd = me.getY();
break;
case MotionEvent.ACTION_MOVE:
x = me.getX();
y = me.getY();
break;
然后在画布上画一条线:
c.drawLine(xStart,yStart,xEnd,YEnd,paint);
这将从开始触摸到结束触摸划出一条直线希望这将对您有所帮助。谢谢您的建议。看起来不错。如果你有我是新接触Android编程的,请粘贴一个代码剪贴。谢谢你的建议。看起来不错。如果你有我是android编程新手,请粘贴一个代码snippt