用户滑动时的矩形运动

时间:2017-10-21 08:08:30

标签: java android

我正在向屏幕绘制一个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);
}
}

2 个答案:

答案 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)将矩形移动到新位置,同时保持它的宽度和高度属性。