我正在向屏幕绘制一个Rect,并且当用户向一个方向滑动时,我正试图向上/向右/向下/向左移动它。当用户向上滑动时,我希望矩形向上移动50px,并且所有四个方向都相同。
我有滑动检测工作,但我不知道如何实际移动Rect。如何在用户滑动的方向上移动Rect r?理想情况下,我希望它能够顺畅地向一个方向移动,而不仅仅是在滑动的方向上滑动50px(如果可能的话)。
我现在有什么:
MainActivity.java
public class MainActivity extends Activity {
float x1,x2;
float y1, y2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View v = new GameView(this);
setContentView(v);
}
public boolean onTouchEvent(MotionEvent touchevent) {
switch (touchevent.getAction())
{
case MotionEvent.ACTION_DOWN:
{
x1 = touchevent.getX();
y1 = touchevent.getY();
break;
}
case MotionEvent.ACTION_UP:
{
x2 = touchevent.getX();
y2 = touchevent.getY();
double r = Math.atan2(y2 - y1, x2 - x1);
if (r > -2.25 && r < -0.75) {
Toast.makeText(getApplicationContext(), "Up", Toast.LENGTH_SHORT).show();
//Move rect 50px up
} else if (r > -0.75 && r < 0.75) {
Toast.makeText(getApplicationContext(), "Right", Toast.LENGTH_SHORT).show();
//Move rect 50px right
} else if (r > 0.75 && r < 2.25) {
Toast.makeText(getApplicationContext(), "Down", Toast.LENGTH_SHORT).show();
//Move rect 50px down
} else if (r > 2.25 || r < -2.25) {
Toast.makeText(getApplicationContext(), "Left", Toast.LENGTH_SHORT).show();
//Move rect 50px Left
}
break;
}
}
return false;
}
}
我在GameView.java中创建了Rect
public class GameView extends View {
public Rect r = new Rect(100, 100, 300, 300);
public Paint p = new Paint();
public GameView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
//Fill
p.setStyle(Paint.Style.FILL);
p.setColor(Color.MAGENTA);
canvas.drawRect(r, p);
}
}
答案 0 :(得分:0)
如何移动画布对象上绘制的任何内容? 在其他地方重绘。
您正在x = 100和y = 100:
上绘制 Rect 角度public Rect r = new Rect(100, 100, 300, 300);
要移动它,您必须更改其x和y坐标并重新绘制它。
答案 1 :(得分:0)
我设法弄明白了。我最终使用.offsetTo(int newX,int newY)将矩形移动到新位置,同时保持它的宽度和高度属性。